diff options
Diffstat (limited to 'src/dbus')
-rw-r--r-- | src/dbus/qdbus_symbols.cpp | 12 | ||||
-rw-r--r-- | src/dbus/qdbusabstractadaptor.cpp | 4 | ||||
-rw-r--r-- | src/dbus/qdbusabstractadaptor_p.h | 2 | ||||
-rw-r--r-- | src/dbus/qdbusargument.h | 11 | ||||
-rw-r--r-- | src/dbus/qdbusconnection.h | 12 | ||||
-rw-r--r-- | src/dbus/qdbusconnection_p.h | 2 | ||||
-rw-r--r-- | src/dbus/qdbuserror.cpp | 2 | ||||
-rw-r--r-- | src/dbus/qdbuserror.h | 15 | ||||
-rw-r--r-- | src/dbus/qdbusextratypes.h | 38 | ||||
-rw-r--r-- | src/dbus/qdbusintegrator.cpp | 14 | ||||
-rw-r--r-- | src/dbus/qdbusintegrator_p.h | 12 | ||||
-rw-r--r-- | src/dbus/qdbusinterface.cpp | 1 | ||||
-rw-r--r-- | src/dbus/qdbusinterface.h | 2 | ||||
-rw-r--r-- | src/dbus/qdbusintrospection_p.h | 4 | ||||
-rw-r--r-- | src/dbus/qdbusmacros.h | 2 | ||||
-rw-r--r-- | src/dbus/qdbusmessage.cpp | 30 | ||||
-rw-r--r-- | src/dbus/qdbusmessage.h | 8 | ||||
-rw-r--r-- | src/dbus/qdbuspendingcall.h | 7 | ||||
-rw-r--r-- | src/dbus/qdbusreply.h | 2 | ||||
-rw-r--r-- | src/dbus/qdbusserver.h | 4 | ||||
-rw-r--r-- | src/dbus/qdbusservicewatcher.h | 4 | ||||
-rw-r--r-- | src/dbus/qdbusunixfiledescriptor.h | 10 | ||||
-rw-r--r-- | src/dbus/qdbusvirtualobject.h | 2 |
23 files changed, 159 insertions, 41 deletions
diff --git a/src/dbus/qdbus_symbols.cpp b/src/dbus/qdbus_symbols.cpp index b82d92b561..395a436869 100644 --- a/src/dbus/qdbus_symbols.cpp +++ b/src/dbus/qdbus_symbols.cpp @@ -48,7 +48,7 @@ void (*qdbus_resolve_me(const char *name))(); #if !defined QT_LINKED_LIBDBUS -#ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_LIBRARY static QLibrary *qdbus_libdbus = 0; void qdbus_unloadLibDBus() @@ -65,7 +65,7 @@ void qdbus_unloadLibDBus() bool qdbus_loadLibDBus() { -#ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_LIBRARY #ifdef QT_BUILD_INTERNAL // this is to simulate a library load failure for our autotest suite. if (!qEnvironmentVariableIsEmpty("QT_SIMULATE_DBUS_LIBFAIL")) @@ -118,7 +118,7 @@ bool qdbus_loadLibDBus() #endif } -#ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_LIBRARY void (*qdbus_resolve_conditionally(const char *name))() { if (qdbus_loadLibDBus()) @@ -129,7 +129,7 @@ void (*qdbus_resolve_conditionally(const char *name))() void (*qdbus_resolve_me(const char *name))() { -#ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_LIBRARY if (!qdbus_loadLibDBus()) qFatal("Cannot find libdbus-1 in your system to resolve symbol '%s'.", name); @@ -144,7 +144,7 @@ void (*qdbus_resolve_me(const char *name))() #endif } -#else // QT_LINKED_LIBDBUS +#else static void qdbus_unloadLibDBus() { if (qEnvironmentVariableIsSet("QDBUS_FORCE_SHUTDOWN")) @@ -153,7 +153,7 @@ static void qdbus_unloadLibDBus() #endif // !QT_LINKED_LIBDBUS -#ifndef QT_BOOTSTRAPPED +#if defined(QT_LINKED_LIBDBUS) || !defined(QT_NO_LIBRARY) Q_DESTRUCTOR_FUNCTION(qdbus_unloadLibDBus) #endif diff --git a/src/dbus/qdbusabstractadaptor.cpp b/src/dbus/qdbusabstractadaptor.cpp index e7529f794e..2864e076e9 100644 --- a/src/dbus/qdbusabstractadaptor.cpp +++ b/src/dbus/qdbusabstractadaptor.cpp @@ -317,7 +317,9 @@ void QDBusAdaptorConnector::relay(QObject *senderObj, int lastSignalIdx, void ** } QVariantList args; - for (int i = 1; i < types.count(); ++i) + const int numTypes = types.count(); + args.reserve(numTypes - 1); + for (int i = 1; i < numTypes; ++i) args << QVariant(types.at(i), argv[i]); // now emit the signal with all the information diff --git a/src/dbus/qdbusabstractadaptor_p.h b/src/dbus/qdbusabstractadaptor_p.h index 9e9375cefc..5ff33f8bef 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> @@ -127,6 +126,7 @@ public: // member variables private: static int relaySlotMethodIndex(); }; +Q_DECLARE_TYPEINFO(QDBusAdaptorConnector::AdaptorData, Q_PRIMITIVE_TYPE); extern QDBusAdaptorConnector *qDBusFindAdaptorConnector(QObject *object); extern QDBusAdaptorConnector *qDBusCreateAdaptorConnector(QObject *object); diff --git a/src/dbus/qdbusargument.h b/src/dbus/qdbusargument.h index 42b266792a..a6bc396861 100644 --- a/src/dbus/qdbusargument.h +++ b/src/dbus/qdbusargument.h @@ -70,9 +70,15 @@ public: QDBusArgument(); QDBusArgument(const QDBusArgument &other); +#ifdef Q_COMPILER_RVALUE_REFS + QDBusArgument(QDBusArgument &&other) Q_DECL_NOTHROW : d(other.d) { other.d = Q_NULLPTR; } + QDBusArgument &operator=(QDBusArgument &&other) Q_DECL_NOTHROW { swap(other); return *this; } +#endif QDBusArgument &operator=(const QDBusArgument &other); ~QDBusArgument(); + void swap(QDBusArgument &other) Q_DECL_NOTHROW { qSwap(d, other.d); } + // used for marshalling (Qt -> D-BUS) QDBusArgument &operator<<(uchar arg); QDBusArgument &operator<<(bool arg); @@ -140,6 +146,7 @@ protected: friend class QDBusArgumentPrivate; mutable QDBusArgumentPrivate *d; }; +Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QDBusArgument) QT_END_NAMESPACE Q_DECLARE_METATYPE(QDBusArgument) @@ -147,7 +154,7 @@ QT_BEGIN_NAMESPACE template<typename T> inline T qdbus_cast(const QDBusArgument &arg #ifndef Q_QDOC -, T * = 0 +, T * = Q_NULLPTR #endif ) { @@ -158,7 +165,7 @@ template<typename T> inline T qdbus_cast(const QDBusArgument &arg template<typename T> inline T qdbus_cast(const QVariant &v #ifndef Q_QDOC -, T * = 0 +, T * = Q_NULLPTR #endif ) { diff --git a/src/dbus/qdbusconnection.h b/src/dbus/qdbusconnection.h index 10598c0b7b..8b2e9234aa 100644 --- a/src/dbus/qdbusconnection.h +++ b/src/dbus/qdbusconnection.h @@ -99,11 +99,12 @@ public: ExportChildObjects = 0x1000 // Reserved = 0xff000000 }; + Q_DECLARE_FLAGS(RegisterOptions, RegisterOption) + enum UnregisterMode { UnregisterNode, UnregisterTree }; - Q_DECLARE_FLAGS(RegisterOptions, RegisterOption) enum VirtualObjectRegisterOption { SingleNode = 0x0, @@ -121,9 +122,14 @@ public: explicit QDBusConnection(const QString &name); QDBusConnection(const QDBusConnection &other); +#ifdef Q_COMPILER_RVALUE_REFS + QDBusConnection(QDBusConnection &&other) Q_DECL_NOTHROW : d(other.d) { other.d = Q_NULLPTR; } + QDBusConnection &operator=(QDBusConnection &&other) Q_DECL_NOTHROW { swap(other); return *this; } +#endif + QDBusConnection &operator=(const QDBusConnection &other); ~QDBusConnection(); - QDBusConnection &operator=(const QDBusConnection &other); + void swap(QDBusConnection &other) Q_DECL_NOTHROW { qSwap(d, other.d); } bool isConnected() const; QString baseService() const; @@ -199,9 +205,11 @@ private: friend class QDBusConnectionPrivate; QDBusConnectionPrivate *d; }; +Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QDBusConnection) Q_DECLARE_OPERATORS_FOR_FLAGS(QDBusConnection::RegisterOptions) Q_DECLARE_OPERATORS_FOR_FLAGS(QDBusConnection::VirtualObjectRegisterOptions) +Q_DECLARE_OPERATORS_FOR_FLAGS(QDBusConnection::ConnectionCapabilities) QT_END_NAMESPACE diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h index 5d8777c622..752ca9c37a 100644 --- a/src/dbus/qdbusconnection_p.h +++ b/src/dbus/qdbusconnection_p.h @@ -166,7 +166,7 @@ public: // typedefs typedef QMultiHash<int, Watcher> WatcherHash; typedef QHash<int, DBusTimeout *> TimeoutHash; - typedef QList<QPair<DBusTimeout *, int> > PendingTimeoutList; + typedef QVector<QPair<DBusTimeout *, int> > PendingTimeoutList; typedef QMultiHash<QString, SignalHook> SignalHookHash; typedef QHash<QString, QDBusMetaObject* > MetaObjectHash; diff --git a/src/dbus/qdbuserror.cpp b/src/dbus/qdbuserror.cpp index 2b13f90fac..40e97ae483 100644 --- a/src/dbus/qdbuserror.cpp +++ b/src/dbus/qdbuserror.cpp @@ -142,6 +142,7 @@ static inline const char *get(QDBusError::ErrorType code) return errorMessages_string + errorMessages_indices[intcode]; } +#ifndef QT_BOOTSTRAPPED static inline QDBusError::ErrorType get(const char *name) { if (!name || !*name) @@ -151,6 +152,7 @@ static inline QDBusError::ErrorType get(const char *name) return QDBusError::ErrorType(i + int(QDBusError::Other)); return QDBusError::Other; } +#endif /*! \class QDBusError diff --git a/src/dbus/qdbuserror.h b/src/dbus/qdbuserror.h index c2c0ff8fc5..ce5275dee9 100644 --- a/src/dbus/qdbuserror.h +++ b/src/dbus/qdbuserror.h @@ -92,11 +92,25 @@ public: #endif QDBusError(ErrorType error, const QString &message); QDBusError(const QDBusError &other); +#ifdef Q_COMPILER_RVALUE_REFS + QDBusError(QDBusError &&other) Q_DECL_NOTHROW + : code(other.code), msg(std::move(other.msg)), nm(std::move(other.nm)), unused(other.unused) + { other.unused = Q_NULLPTR; } + QDBusError &operator=(QDBusError &&other) Q_DECL_NOTHROW { swap(other); return *this; } +#endif QDBusError &operator=(const QDBusError &other); #ifndef QT_BOOTSTRAPPED QDBusError &operator=(const QDBusMessage &msg); #endif + void swap(QDBusError &other) Q_DECL_NOTHROW + { + qSwap(code, other.code); + qSwap(msg, other.msg); + qSwap(nm, other.nm); + qSwap(unused, other.unused); + } + ErrorType type() const; QString name() const; QString message() const; @@ -110,6 +124,7 @@ private: QString nm; void *unused; }; +Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QDBusError) #ifndef QT_NO_DEBUG_STREAM Q_DBUS_EXPORT QDebug operator<<(QDebug, const QDBusError &); diff --git a/src/dbus/qdbusextratypes.h b/src/dbus/qdbusextratypes.h index 390ff6c91c..8495b3a320 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 @@ -50,11 +53,18 @@ class Q_DBUS_EXPORT QDBusObjectPath { QString m_path; public: - inline QDBusObjectPath() { } + QDBusObjectPath() Q_DECL_NOTHROW : m_path() {} + // compiler-generated copy/move constructor/assignment operators are ok! + // compiler-generated destructor is ok! inline explicit QDBusObjectPath(const char *path); inline explicit QDBusObjectPath(QLatin1String path); inline explicit QDBusObjectPath(const QString &path); +#ifdef Q_COMPILER_RVALUE_REFS + explicit QDBusObjectPath(QString &&p) : m_path(std::move(p)) { doCheck(); } +#endif + + void swap(QDBusObjectPath &other) Q_DECL_NOTHROW { qSwap(m_path, other.m_path); } inline void setPath(const QString &path); @@ -64,6 +74,7 @@ public: private: void doCheck(); }; +Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QDBusObjectPath) inline QDBusObjectPath::QDBusObjectPath(const char *objectPath) : m_path(QString::fromLatin1(objectPath)) @@ -89,7 +100,7 @@ inline bool operator!=(const QDBusObjectPath &lhs, const QDBusObjectPath &rhs) inline bool operator<(const QDBusObjectPath &lhs, const QDBusObjectPath &rhs) { return lhs.path() < rhs.path(); } -inline uint qHash(const QDBusObjectPath &objectPath, uint seed) +inline uint qHash(const QDBusObjectPath &objectPath, uint seed = 0) { return qHash(objectPath.path(), seed); } @@ -97,11 +108,18 @@ class Q_DBUS_EXPORT QDBusSignature { QString m_signature; public: - inline QDBusSignature() { } + QDBusSignature() Q_DECL_NOTHROW : m_signature() {} + // compiler-generated copy/move constructor/assignment operators are ok! + // compiler-generated destructor is ok! inline explicit QDBusSignature(const char *signature); inline explicit QDBusSignature(QLatin1String signature); inline explicit QDBusSignature(const QString &signature); +#ifdef Q_COMPILER_RVALUE_REFS + explicit QDBusSignature(QString &&sig) : m_signature(std::move(sig)) { doCheck(); } +#endif + + void swap(QDBusSignature &other) Q_DECL_NOTHROW { qSwap(m_signature, other.m_signature); } inline void setSignature(const QString &signature); @@ -111,6 +129,7 @@ public: private: void doCheck(); }; +Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QDBusSignature) inline QDBusSignature::QDBusSignature(const char *dBusSignature) : m_signature(QString::fromLatin1(dBusSignature)) @@ -136,21 +155,30 @@ inline bool operator!=(const QDBusSignature &lhs, const QDBusSignature &rhs) inline bool operator<(const QDBusSignature &lhs, const QDBusSignature &rhs) { return lhs.signature() < rhs.signature(); } -inline uint qHash(const QDBusSignature &signature, uint seed) +inline uint qHash(const QDBusSignature &signature, uint seed = 0) { return qHash(signature.signature(), seed); } class QDBusVariant { QVariant m_variant; public: - inline QDBusVariant() { } + QDBusVariant() Q_DECL_NOTHROW : m_variant() {} + // compiler-generated copy/move constructor/assignment operators are ok! + // compiler-generated destructor is ok! + inline explicit QDBusVariant(const QVariant &variant); +#ifdef Q_COMPILER_RVALUE_REFS + explicit QDBusVariant(QVariant &&v) Q_DECL_NOTHROW : m_variant(std::move(v)) {} +#endif + + void swap(QDBusVariant &other) Q_DECL_NOTHROW { qSwap(m_variant, other.m_variant); } inline void setVariant(const QVariant &variant); inline QVariant variant() const { return m_variant; } }; +Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QDBusVariant) inline QDBusVariant::QDBusVariant(const QVariant &dBusVariant) : m_variant(dBusVariant) { } diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp index cce8b9c28d..22c1a3e363 100644 --- a/src/dbus/qdbusintegrator.cpp +++ b/src/dbus/qdbusintegrator.cpp @@ -160,7 +160,7 @@ static dbus_bool_t qDBusAddTimeout(DBusTimeout *timeout, void *data) static bool qDBusRealAddTimeout(QDBusConnectionPrivate *d, DBusTimeout *timeout, int ms) { - Q_ASSERT(d->timeouts.keys(timeout).isEmpty()); + Q_ASSERT(d->timeouts.key(timeout, 0) == 0); int timerId = d->startTimer(ms); if (!timerId) @@ -952,14 +952,19 @@ void QDBusConnectionPrivate::deliverCall(QObject *object, int /*flags*/, const Q } // output arguments + const int numMetaTypes = metaTypes.count(); QVariantList outputArgs; void *null = 0; if (metaTypes[0] != QMetaType::Void && metaTypes[0] != QMetaType::UnknownType) { + outputArgs.reserve(numMetaTypes - i + 1); QVariant arg(metaTypes[0], null); outputArgs.append( arg ); params[0] = const_cast<void*>(outputArgs.at( outputArgs.count() - 1 ).constData()); + } else { + outputArgs.reserve(numMetaTypes - i); } - for ( ; i < metaTypes.count(); ++i) { + + for ( ; i < numMetaTypes; ++i) { QVariant arg(metaTypes[i], null); outputArgs.append( arg ); params.append(const_cast<void*>(outputArgs.at( outputArgs.count() - 1 ).constData())); @@ -1730,7 +1735,7 @@ static QDBusConnection::ConnectionCapabilities connectionCapabilies(DBusConnecti # if DBUS_VERSION-0 >= 0x010400 can_send_type = dbus_connection_can_send_type; # endif -#else +#elif !defined(QT_NO_LIBRARY) // run-time check if the next functions are available can_send_type = (can_send_type_t)qdbus_resolve_conditionally("dbus_connection_can_send_type"); #endif @@ -1898,7 +1903,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..95eeed3fff 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" @@ -77,10 +76,21 @@ struct QDBusSlotCache int flags; int slotIdx; QVector<int> metaTypes; + + void swap(Data &other) Q_DECL_NOTHROW + { + qSwap(flags, other.flags); + qSwap(slotIdx, other.slotIdx); + qSwap(metaTypes, other.metaTypes); + } }; typedef QMultiHash<QString, Data> Hash; Hash hash; + + void swap(QDBusSlotCache &other) Q_DECL_NOTHROW { qSwap(hash, other.hash); } }; +Q_DECLARE_SHARED(QDBusSlotCache::Data) +Q_DECLARE_SHARED(QDBusSlotCache) class QDBusCallDeliveryEvent: public QMetaCallEvent { diff --git a/src/dbus/qdbusinterface.cpp b/src/dbus/qdbusinterface.cpp index 1fc313d8cc..421fc0bdb6 100644 --- a/src/dbus/qdbusinterface.cpp +++ b/src/dbus/qdbusinterface.cpp @@ -278,6 +278,7 @@ int QDBusInterfacePrivate::metacall(QMetaObject::Call c, int id, void **argv) // we will assume that the input arguments were passed correctly QVariantList args; + args.reserve(inputTypesCount); int i = 1; for ( ; i <= inputTypesCount; ++i) args << QVariant(inputTypes[i], argv[i]); diff --git a/src/dbus/qdbusinterface.h b/src/dbus/qdbusinterface.h index b63df10763..b48a206644 100644 --- a/src/dbus/qdbusinterface.h +++ b/src/dbus/qdbusinterface.h @@ -52,7 +52,7 @@ private: public: QDBusInterface(const QString &service, const QString &path, const QString &interface = QString(), const QDBusConnection &connection = QDBusConnection::sessionBus(), - QObject *parent = 0); + QObject *parent = Q_NULLPTR); ~QDBusInterface(); virtual const QMetaObject *metaObject() const Q_DECL_OVERRIDE; diff --git a/src/dbus/qdbusintrospection_p.h b/src/dbus/qdbusintrospection_p.h index ce3be00733..f34e336eb3 100644 --- a/src/dbus/qdbusintrospection_p.h +++ b/src/dbus/qdbusintrospection_p.h @@ -46,7 +46,7 @@ // #include <QtCore/qstring.h> -#include <QtCore/qlist.h> +#include <QtCore/qvector.h> #include <QtCore/qstringlist.h> #include <QtCore/qmap.h> #include <QtCore/qpair.h> @@ -71,7 +71,7 @@ public: // typedefs typedef QMap<QString, QString> Annotations; - typedef QList<Argument> Arguments; + typedef QVector<Argument> Arguments; typedef QMultiMap<QString, Method> Methods; typedef QMultiMap<QString, Signal> Signals; typedef QMap<QString, Property> Properties; 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..e85d600080 100644 --- a/src/dbus/qdbusmessage.h +++ b/src/dbus/qdbusmessage.h @@ -62,11 +62,18 @@ public: QDBusMessage(); QDBusMessage(const QDBusMessage &other); +#ifdef Q_COMPILER_RVALUE_REFS + QDBusMessage &operator=(QDBusMessage &&other) Q_DECL_NOTHROW { swap(other); return *this; } +#endif QDBusMessage &operator=(const QDBusMessage &other); ~QDBusMessage(); + void swap(QDBusMessage &other) Q_DECL_NOTHROW { qSwap(d_ptr, other.d_ptr); } + 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); @@ -115,6 +122,7 @@ private: friend class QDBusMessagePrivate; QDBusMessagePrivate *d_ptr; }; +Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QDBusMessage) #ifndef QT_NO_DEBUG_STREAM Q_DBUS_EXPORT QDebug operator<<(QDebug, const QDBusMessage &); diff --git a/src/dbus/qdbuspendingcall.h b/src/dbus/qdbuspendingcall.h index 99d261d05b..3bcacffd22 100644 --- a/src/dbus/qdbuspendingcall.h +++ b/src/dbus/qdbuspendingcall.h @@ -56,9 +56,12 @@ class Q_DBUS_EXPORT QDBusPendingCall public: QDBusPendingCall(const QDBusPendingCall &other); ~QDBusPendingCall(); +#ifdef Q_COMPILER_RVALUE_REFS + QDBusPendingCall &operator=(QDBusPendingCall &&other) Q_DECL_NOTHROW { swap(other); return *this; } +#endif QDBusPendingCall &operator=(const QDBusPendingCall &other); - void swap(QDBusPendingCall &other) { qSwap(d, other.d); } + void swap(QDBusPendingCall &other) Q_DECL_NOTHROW { qSwap(d, other.d); } #ifndef Q_QDOC // pretend that they aren't here @@ -93,7 +96,7 @@ class Q_DBUS_EXPORT QDBusPendingCallWatcher: public QObject, public QDBusPending { Q_OBJECT public: - explicit QDBusPendingCallWatcher(const QDBusPendingCall &call, QObject *parent = 0); + explicit QDBusPendingCallWatcher(const QDBusPendingCall &call, QObject *parent = Q_NULLPTR); ~QDBusPendingCallWatcher(); #ifdef Q_QDOC diff --git a/src/dbus/qdbusreply.h b/src/dbus/qdbusreply.h index 56830f698a..4cfe8db161 100644 --- a/src/dbus/qdbusreply.h +++ b/src/dbus/qdbusreply.h @@ -125,7 +125,7 @@ private: template<> inline QDBusReply<QVariant>& QDBusReply<QVariant>::operator=(const QDBusMessage &reply) { - void *null = 0; + void *null = Q_NULLPTR; QVariant data(qMetaTypeId<QDBusVariant>(), null); qDBusReplyFill(reply, m_error, data); m_data = qvariant_cast<QDBusVariant>(data).variant(); diff --git a/src/dbus/qdbusserver.h b/src/dbus/qdbusserver.h index cdd531802a..db21f268b0 100644 --- a/src/dbus/qdbusserver.h +++ b/src/dbus/qdbusserver.h @@ -50,8 +50,8 @@ class Q_DBUS_EXPORT QDBusServer: public QObject { Q_OBJECT public: - explicit QDBusServer(const QString &address, QObject *parent = 0); - explicit QDBusServer(QObject *parent = 0); + explicit QDBusServer(const QString &address, QObject *parent = Q_NULLPTR); + explicit QDBusServer(QObject *parent = Q_NULLPTR); virtual ~QDBusServer(); bool isConnected() const; diff --git a/src/dbus/qdbusservicewatcher.h b/src/dbus/qdbusservicewatcher.h index 020ce13c30..6f6ce917af 100644 --- a/src/dbus/qdbusservicewatcher.h +++ b/src/dbus/qdbusservicewatcher.h @@ -58,9 +58,9 @@ public: }; Q_DECLARE_FLAGS(WatchMode, WatchModeFlag) - explicit QDBusServiceWatcher(QObject *parent = 0); + explicit QDBusServiceWatcher(QObject *parent = Q_NULLPTR); QDBusServiceWatcher(const QString &service, const QDBusConnection &connection, - WatchMode watchMode = WatchForOwnerChange, QObject *parent = 0); + WatchMode watchMode = WatchForOwnerChange, QObject *parent = Q_NULLPTR); ~QDBusServiceWatcher(); QStringList watchedServices() const; diff --git a/src/dbus/qdbusunixfiledescriptor.h b/src/dbus/qdbusunixfiledescriptor.h index 35e9d87cf3..9fb6eb44c7 100644 --- a/src/dbus/qdbusunixfiledescriptor.h +++ b/src/dbus/qdbusunixfiledescriptor.h @@ -55,10 +55,13 @@ public: QDBusUnixFileDescriptor(); explicit QDBusUnixFileDescriptor(int fileDescriptor); QDBusUnixFileDescriptor(const QDBusUnixFileDescriptor &other); +#if defined(Q_COMPILER_RVALUE_REFS) + QDBusUnixFileDescriptor &operator=(QDBusUnixFileDescriptor &&other) Q_DECL_NOTHROW { swap(other); return *this; } +#endif QDBusUnixFileDescriptor &operator=(const QDBusUnixFileDescriptor &other); ~QDBusUnixFileDescriptor(); - void swap(QDBusUnixFileDescriptor &other) + void swap(QDBusUnixFileDescriptor &other) Q_DECL_NOTHROW { qSwap(d, other.d); } bool isValid() const; @@ -71,11 +74,6 @@ public: static bool isSupported(); -#if defined(Q_COMPILER_RVALUE_REFS) - inline QDBusUnixFileDescriptor &operator=(QDBusUnixFileDescriptor &&other) - { d.swap(other.d); return *this; } -#endif - protected: typedef QExplicitlySharedDataPointer<QDBusUnixFileDescriptorPrivate> Data; Data d; diff --git a/src/dbus/qdbusvirtualobject.h b/src/dbus/qdbusvirtualobject.h index 469c41f363..740c5f712e 100644 --- a/src/dbus/qdbusvirtualobject.h +++ b/src/dbus/qdbusvirtualobject.h @@ -51,7 +51,7 @@ class Q_DBUS_EXPORT QDBusVirtualObject : public QObject { Q_OBJECT public: - explicit QDBusVirtualObject(QObject *parent = 0); + explicit QDBusVirtualObject(QObject *parent = Q_NULLPTR); virtual ~QDBusVirtualObject(); virtual QString introspect(const QString &path) const = 0; |