summaryrefslogtreecommitdiffstats
path: root/src/dbus
diff options
context:
space:
mode:
Diffstat (limited to 'src/dbus')
-rw-r--r--src/dbus/qdbusabstractinterface.cpp19
-rw-r--r--src/dbus/qdbusintegrator.cpp2
2 files changed, 16 insertions, 5 deletions
diff --git a/src/dbus/qdbusabstractinterface.cpp b/src/dbus/qdbusabstractinterface.cpp
index 2d7b15fe62..53def1beb6 100644
--- a/src/dbus/qdbusabstractinterface.cpp
+++ b/src/dbus/qdbusabstractinterface.cpp
@@ -609,9 +609,22 @@ void QDBusAbstractInterface::disconnectNotify(const QMetaMethod &signal)
return;
QDBusConnectionPrivate *conn = d->connectionPrivate();
- if (conn && !isSignalConnected(signal))
- conn->disconnectRelay(d->service, d->path, d->interface,
- this, signal);
+ if (conn && signal.isValid() && !isSignalConnected(signal))
+ return conn->disconnectRelay(d->service, d->path, d->interface,
+ this, signal);
+ if (!conn)
+ return;
+
+ // wildcard disconnecting, we need to figure out which of our signals are
+ // no longer connected to anything
+ const QMetaObject *mo = metaObject();
+ int midx = QObject::staticMetaObject.methodCount();
+ const int end = mo->methodCount();
+ for ( ; midx < end; ++midx) {
+ QMetaMethod mm = mo->method(midx);
+ if (mm.methodType() == QMetaMethod::Signal && !isSignalConnected(mm))
+ conn->disconnectRelay(d->service, d->path, d->interface, this, mm);
+ }
}
/*!
diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
index 839fe55901..afb8506b28 100644
--- a/src/dbus/qdbusintegrator.cpp
+++ b/src/dbus/qdbusintegrator.cpp
@@ -2393,8 +2393,6 @@ void QDBusConnectionPrivate::disconnectRelay(const QString &service,
return;
}
}
-
- qWarning("QDBusConnectionPrivate::disconnectRelay called for a signal that was not found");
}
QString QDBusConnectionPrivate::getNameOwner(const QString& serviceName)