diff options
Diffstat (limited to 'src/dbus')
-rw-r--r-- | src/dbus/qdbusabstractadaptor_p.h | 1 | ||||
-rw-r--r-- | src/dbus/qdbusextratypes.h | 3 | ||||
-rw-r--r-- | src/dbus/qdbusintegrator.cpp | 3 | ||||
-rw-r--r-- | src/dbus/qdbusintegrator_p.h | 1 | ||||
-rw-r--r-- | src/dbus/qdbusmacros.h | 2 | ||||
-rw-r--r-- | src/dbus/qdbusmessage.cpp | 30 | ||||
-rw-r--r-- | src/dbus/qdbusmessage.h | 2 |
7 files changed, 38 insertions, 4 deletions
diff --git a/src/dbus/qdbusabstractadaptor_p.h b/src/dbus/qdbusabstractadaptor_p.h index 9e9375cefc..8fd158614f 100644 --- a/src/dbus/qdbusabstractadaptor_p.h +++ b/src/dbus/qdbusabstractadaptor_p.h @@ -50,7 +50,6 @@ #include <QtCore/qobject.h> #include <QtCore/qmap.h> -#include <QtCore/qhash.h> #include <QtCore/qreadwritelock.h> #include <QtCore/qvariant.h> #include <QtCore/qvector.h> diff --git a/src/dbus/qdbusextratypes.h b/src/dbus/qdbusextratypes.h index 390ff6c91c..5032db08d0 100644 --- a/src/dbus/qdbusextratypes.h +++ b/src/dbus/qdbusextratypes.h @@ -39,7 +39,10 @@ #include <QtCore/qvariant.h> #include <QtCore/qstring.h> #include <QtDBus/qdbusmacros.h> +#if QT_DEPRECATED_SINCE(5, 5) #include <QtCore/qhash.h> +#endif +#include <QtCore/qhashfunctions.h> #ifndef QT_NO_DBUS diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp index cce8b9c28d..b310483d11 100644 --- a/src/dbus/qdbusintegrator.cpp +++ b/src/dbus/qdbusintegrator.cpp @@ -1898,7 +1898,8 @@ int QDBusConnectionPrivate::send(const QDBusMessage& message) qPrintable(message.interface()), qPrintable(message.member()), qPrintable(error.message())); else if (message.type() == QDBusMessage::SignalMessage) - qWarning("QDBusConnection: error: could not send signal path \"%s\" interface \"%s\" member \"%s\": %s", + qWarning("QDBusConnection: error: could not send signal to service \"%s\" path \"%s\" interface \"%s\" member \"%s\": %s", + qPrintable(message.service()), qPrintable(message.path()), qPrintable(message.interface()), qPrintable(message.member()), qPrintable(error.message())); diff --git a/src/dbus/qdbusintegrator_p.h b/src/dbus/qdbusintegrator_p.h index 3e4f79c43c..cd358569df 100644 --- a/src/dbus/qdbusintegrator_p.h +++ b/src/dbus/qdbusintegrator_p.h @@ -50,7 +50,6 @@ #include "qcoreevent.h" #include "qeventloop.h" -#include "qhash.h" #include "qobject.h" #include "private/qobject_p.h" #include "qlist.h" diff --git a/src/dbus/qdbusmacros.h b/src/dbus/qdbusmacros.h index 1f774b0f08..2a1d0a22d7 100644 --- a/src/dbus/qdbusmacros.h +++ b/src/dbus/qdbusmacros.h @@ -45,7 +45,9 @@ #ifdef Q_CC_MSVC #include <QtCore/qlist.h> #include <QtCore/qset.h> +#if QT_DEPRECATED_SINCE(5, 5) #include <QtCore/qhash.h> +#endif #include <QtCore/qvector.h> #endif diff --git a/src/dbus/qdbusmessage.cpp b/src/dbus/qdbusmessage.cpp index b92e7f5cd7..302d94696d 100644 --- a/src/dbus/qdbusmessage.cpp +++ b/src/dbus/qdbusmessage.cpp @@ -153,8 +153,10 @@ DBusMessage *QDBusMessagePrivate::toDBusMessage(const QDBusMessage &message, QDB } break; case QDBusMessage::SignalMessage: - // nothing can be empty here + // only the service name can be empty here if (!d_ptr->parametersValidated) { + if (!QDBusUtil::checkBusName(d_ptr->service, QDBusUtil::EmptyAllowed, error)) + return 0; if (!QDBusUtil::checkObjectPath(d_ptr->path, QDBusUtil::EmptyNotAllowed, error)) return 0; if (!QDBusUtil::checkInterfaceName(d_ptr->interface, QDBusUtil::EmptyAllowed, error)) @@ -165,6 +167,7 @@ DBusMessage *QDBusMessagePrivate::toDBusMessage(const QDBusMessage &message, QDB msg = q_dbus_message_new_signal(d_ptr->path.toUtf8(), d_ptr->interface.toUtf8(), d_ptr->name.toUtf8()); + q_dbus_message_set_destination(msg, data(d_ptr->service.toUtf8())); break; } @@ -372,6 +375,31 @@ QDBusMessage QDBusMessage::createSignal(const QString &path, const QString &inte } /*! + \since 5.6 + + Constructs a new DBus message with the given \a path, \a interface + and \a name, representing a signal emission to \a destination. + + A DBus signal is emitted from one application and is received only by + the application owning the destination service name. + + The QDBusMessage object that is returned can be sent using the + QDBusConnection::send() function. +*/ +QDBusMessage QDBusMessage::createTargetedSignal(const QString &service, const QString &path, + const QString &interface, const QString &name) +{ + QDBusMessage message; + message.d_ptr->type = SignalMessage; + message.d_ptr->service = service; + message.d_ptr->path = path; + message.d_ptr->interface = interface; + message.d_ptr->name = name; + + return message; +} + +/*! Constructs a new DBus message representing a method call. A method call always informs its destination address (\a service, \a path, \a interface and \a method). diff --git a/src/dbus/qdbusmessage.h b/src/dbus/qdbusmessage.h index 77f34ec5e2..640226e77a 100644 --- a/src/dbus/qdbusmessage.h +++ b/src/dbus/qdbusmessage.h @@ -67,6 +67,8 @@ public: static QDBusMessage createSignal(const QString &path, const QString &interface, const QString &name); + static QDBusMessage createTargetedSignal(const QString &service, const QString &path, + const QString &interface, const QString &name); static QDBusMessage createMethodCall(const QString &destination, const QString &path, const QString &interface, const QString &method); static QDBusMessage createError(const QString &name, const QString &msg); |