diff options
Diffstat (limited to 'src/dbus')
-rw-r--r-- | src/dbus/qdbusabstractinterface.cpp | 19 | ||||
-rw-r--r-- | src/dbus/qdbusintegrator.cpp | 2 |
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) |