diff options
Diffstat (limited to 'src/dbus')
-rw-r--r-- | src/dbus/qdbus_symbols_p.h | 78 | ||||
-rw-r--r-- | src/dbus/qdbusabstractinterface.h | 6 | ||||
-rw-r--r-- | src/dbus/qdbusargument_p.h | 3 | ||||
-rw-r--r-- | src/dbus/qdbusconnection.cpp | 35 | ||||
-rw-r--r-- | src/dbus/qdbusconnection.h | 7 | ||||
-rw-r--r-- | src/dbus/qdbusconnection_p.h | 6 | ||||
-rw-r--r-- | src/dbus/qdbusconnectioninterface.h | 4 | ||||
-rw-r--r-- | src/dbus/qdbusconnectionmanager_p.h | 3 | ||||
-rw-r--r-- | src/dbus/qdbusintegrator.cpp | 8 | ||||
-rw-r--r-- | src/dbus/qdbusintegrator_p.h | 4 | ||||
-rw-r--r-- | src/dbus/qdbusinterface.h | 6 | ||||
-rw-r--r-- | src/dbus/qdbusmarshaller.cpp | 87 | ||||
-rw-r--r-- | src/dbus/qdbusmessage.cpp | 35 | ||||
-rw-r--r-- | src/dbus/qdbusmessage_p.h | 3 | ||||
-rw-r--r-- | src/dbus/qdbusmetaobject.cpp | 16 | ||||
-rw-r--r-- | src/dbus/qdbuspendingreply.h | 5 |
16 files changed, 186 insertions, 120 deletions
diff --git a/src/dbus/qdbus_symbols_p.h b/src/dbus/qdbus_symbols_p.h index 4bec3af490..cfa3442518 100644 --- a/src/dbus/qdbus_symbols_p.h +++ b/src/dbus/qdbus_symbols_p.h @@ -64,14 +64,90 @@ void (*qdbus_resolve_conditionally(const char *name))(); // doesn't print a warn void (*qdbus_resolve_me(const char *name))(); // prints a warning bool qdbus_loadLibDBus(); +//# define TRACE_DBUS_CALLS +# ifdef TRACE_DBUS_CALLS +namespace QtDBusCallTracing { +struct TraceDBusCall +{ + struct ThreadData { + TraceDBusCall *ptr; + int level; + bool finishedPrinted; + }; + + static inline ThreadData &td() + { + static thread_local ThreadData value; + return value; + } + + ThreadData savedData; + QDebug s; + TraceDBusCall(QDebug s, const char *fname) + : savedData(td()), s(s.nospace() << QByteArray(savedData.level * 3, ' ').constData() << fname) + { + if (savedData.ptr && !savedData.finishedPrinted) { + savedData.ptr->s << " ...unfinished"; + savedData.ptr->s = qDebug().nospace() << QByteArray(savedData.level * 3 - 3, ' ').constData(); + savedData.finishedPrinted = true; + } + ThreadData &data = td(); + data.ptr = this; + data.level++; + data.finishedPrinted = false; + } + ~TraceDBusCall() + { + td() = savedData; + } + + void operator()() { s << ")"; } + template <typename... Args> void operator()(const char *arg1, Args &&... args) + { + s << '"' << arg1 << '"'; + if (sizeof...(args)) + s << ", "; + operator()(args...); + } + template <typename Arg1, typename... Args> void operator()(Arg1 &&arg1, Args &&... args) + { + s << arg1; + if (sizeof...(args)) + s << ", "; + operator()(args...); + } +}; +template <typename T> T operator,(TraceDBusCall &&tc, T &&ret) +{ + tc.s << " = " << ret; + return ret; +} +inline const char *operator,(TraceDBusCall &&tc, const char *ret) +{ + tc.s << " = \"" << ret << '"'; + return ret; +} + +template <typename T> struct TraceReturn { typedef TraceDBusCall Type; }; +template <> struct TraceReturn<void> { typedef void Type; }; +} + +# define DEBUGCALL(name, argcall) QtDBusCallTracing::TraceDBusCall tc(qDebug(), name "("); tc argcall +# define DEBUGRET(ret) (QtDBusCallTracing::TraceReturn<ret>::Type) tc , +# else +# define DEBUGCALL(name, argcall) +# define DEBUGRET(ret) +# endif + # define DEFINEFUNC(ret, func, args, argcall, funcret) \ typedef ret (* _q_PTR_##func) args; \ static inline ret q_##func args \ { \ static _q_PTR_##func ptr; \ + DEBUGCALL(#func, argcall); \ if (!ptr) \ ptr = (_q_PTR_##func) qdbus_resolve_me(#func); \ - funcret ptr argcall; \ + funcret DEBUGRET(ret) ptr argcall; \ } #else // defined QT_LINKED_LIBDBUS diff --git a/src/dbus/qdbusabstractinterface.h b/src/dbus/qdbusabstractinterface.h index e01cfad36b..7ad0048246 100644 --- a/src/dbus/qdbusabstractinterface.h +++ b/src/dbus/qdbusabstractinterface.h @@ -56,7 +56,7 @@ class QDBusAbstractInterfacePrivate; class Q_DBUS_EXPORT QDBusAbstractInterfaceBase: public QObject { public: - int qt_metacall(QMetaObject::Call, int, void**); + int qt_metacall(QMetaObject::Call, int, void**) Q_DECL_OVERRIDE; protected: QDBusAbstractInterfaceBase(QDBusAbstractInterfacePrivate &dd, QObject *parent); private: @@ -136,8 +136,8 @@ protected: const QDBusConnection &connection, QObject *parent); QDBusAbstractInterface(QDBusAbstractInterfacePrivate &, QObject *parent); - void connectNotify(const QMetaMethod &signal); - void disconnectNotify(const QMetaMethod &signal); + void connectNotify(const QMetaMethod &signal) Q_DECL_OVERRIDE; + void disconnectNotify(const QMetaMethod &signal) Q_DECL_OVERRIDE; QVariant internalPropGet(const char *propname) const; void internalPropSet(const char *propname, const QVariant &value); QDBusMessage internalConstCall(QDBus::CallMode mode, diff --git a/src/dbus/qdbusargument_p.h b/src/dbus/qdbusargument_p.h index 12039307e1..5f8c13c2c5 100644 --- a/src/dbus/qdbusargument_p.h +++ b/src/dbus/qdbusargument_p.h @@ -97,7 +97,7 @@ public: class QDBusMarshaller: public QDBusArgumentPrivate { public: - QDBusMarshaller(int flags) : QDBusArgumentPrivate(flags), parent(0), ba(0), closeCode(0), ok(true) + QDBusMarshaller(int flags) : QDBusArgumentPrivate(flags), parent(0), ba(0), closeCode(0), ok(true), skipSignature(false) { direction = Marshalling; } ~QDBusMarshaller(); @@ -145,6 +145,7 @@ public: QString errorString; char closeCode; bool ok; + bool skipSignature; private: Q_DISABLE_COPY(QDBusMarshaller) diff --git a/src/dbus/qdbusconnection.cpp b/src/dbus/qdbusconnection.cpp index a46df16ac5..d25c620b58 100644 --- a/src/dbus/qdbusconnection.cpp +++ b/src/dbus/qdbusconnection.cpp @@ -58,18 +58,6 @@ QT_BEGIN_NAMESPACE Q_GLOBAL_STATIC(QDBusConnectionManager, _q_manager) -QDBusConnectionPrivate *QDBusConnectionManager::sender() const -{ - QMutexLocker locker(&senderMutex); - return connection(senderName); -} - -void QDBusConnectionManager::setSender(const QDBusConnectionPrivate *s) -{ - QMutexLocker locker(&senderMutex); - senderName = (s ? s->name : QString()); -} - QDBusConnectionPrivate *QDBusConnectionManager::connection(const QString &name) const { return connectionHash.value(name, 0); @@ -1096,29 +1084,20 @@ QDBusConnection QDBusConnection::systemBus() return *_q_systemBus(); } +#if QT_DEPRECATED_SINCE(5,5) /*! - \nonreentrant + \deprecated - Returns the connection that sent the signal, if called in a slot activated - by QDBus; otherwise it returns 0. + Always returns a disconnected, invalid QDBusConnection object. For the old + functionality of determining the sender connection, please use \ref QDBusContext. - \note Please avoid this function. This function is not thread-safe, so if - there's any other thread delivering a D-Bus call, this function may return - the wrong connection. In new code, please use QDBusContext::connection() - (see that class for a description on how to use it). + \sa QDBusContext */ QDBusConnection QDBusConnection::sender() { - return QDBusConnection(_q_manager()->sender()); -} - -/*! - \internal -*/ -void QDBusConnectionPrivate::setSender(const QDBusConnectionPrivate *s) -{ - _q_manager()->setSender(s); + return QDBusConnection(QString()); } +#endif /*! \internal diff --git a/src/dbus/qdbusconnection.h b/src/dbus/qdbusconnection.h index 66fb514865..76657e0b5b 100644 --- a/src/dbus/qdbusconnection.h +++ b/src/dbus/qdbusconnection.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2015 Intel Corporation. ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtDBus module of the Qt Toolkit. @@ -35,6 +36,7 @@ #define QDBUSCONNECTION_H #include <QtDBus/qdbusmacros.h> +#include <QtCore/qobjectdefs.h> #include <QtCore/qstring.h> #ifndef QT_NO_DBUS @@ -183,7 +185,10 @@ public: static QDBusConnection sessionBus(); static QDBusConnection systemBus(); - static QDBusConnection sender(); +#if QT_DEPRECATED_SINCE(5,5) + static QT_DEPRECATED_X("This function no longer works, use QDBusContext instead") + QDBusConnection sender(); +#endif protected: explicit QDBusConnection(QDBusConnectionPrivate *dd); diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h index 00c3aced0e..85c8719fd1 100644 --- a/src/dbus/qdbusconnection_p.h +++ b/src/dbus/qdbusconnection_p.h @@ -253,8 +253,8 @@ private: QString getNameOwnerNoCache(const QString &service); protected: - void customEvent(QEvent *e); - void timerEvent(QTimerEvent *e); + void customEvent(QEvent *e) Q_DECL_OVERRIDE; + void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE; public slots: // public slots @@ -331,8 +331,6 @@ public: static QDBusConnectionPrivate *d(const QDBusConnection& q) { return q.d; } static QDBusConnection q(QDBusConnectionPrivate *connection) { return QDBusConnection(connection); } - static void setSender(const QDBusConnectionPrivate *s); - friend class QDBusActivateObjectEvent; friend class QDBusCallDeliveryEvent; }; diff --git a/src/dbus/qdbusconnectioninterface.h b/src/dbus/qdbusconnectioninterface.h index ed267ecc79..a6b18b7dc1 100644 --- a/src/dbus/qdbusconnectioninterface.h +++ b/src/dbus/qdbusconnectioninterface.h @@ -106,8 +106,8 @@ Q_SIGNALS: void NameLost(const QString &); void NameOwnerChanged(const QString &, const QString &, const QString &); protected: - void connectNotify(const QMetaMethod &); - void disconnectNotify(const QMetaMethod &); + void connectNotify(const QMetaMethod &) Q_DECL_OVERRIDE; + void disconnectNotify(const QMetaMethod &) Q_DECL_OVERRIDE; #endif }; diff --git a/src/dbus/qdbusconnectionmanager_p.h b/src/dbus/qdbusconnectionmanager_p.h index d2c8282f6c..6650685180 100644 --- a/src/dbus/qdbusconnectionmanager_p.h +++ b/src/dbus/qdbusconnectionmanager_p.h @@ -63,9 +63,6 @@ public: void removeConnection(const QString &name); void setConnection(const QString &name, QDBusConnectionPrivate *c); - QDBusConnectionPrivate *sender() const; - void setSender(const QDBusConnectionPrivate *s); - mutable QMutex mutex; private: QHash<QString, QDBusConnectionPrivate *> connectionHash; diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp index 698fb1b46c..b741e97894 100644 --- a/src/dbus/qdbusintegrator.cpp +++ b/src/dbus/qdbusintegrator.cpp @@ -94,6 +94,8 @@ static inline QDebug operator<<(QDebug dbg, const QThread *th) dbg.nospace() << "QThread(ptr=" << (void*)th; if (th && !th->objectName().isEmpty()) dbg.nospace() << ", name=" << th->objectName(); + else if (th) + dbg.nospace() << ", name=" << th->metaObject()->className(); dbg.nospace() << ')'; return dbg.space(); } @@ -399,7 +401,7 @@ static void qDBusNewConnection(DBusServer *server, DBusConnection *connection, v QDBusConnectionPrivate *newConnection = new QDBusConnectionPrivate(serverConnection->parent()); QMutexLocker locker(&QDBusConnectionManager::instance()->mutex); - QDBusConnectionManager::instance()->setConnection(QLatin1String("QDBusServer-") + QString::number(reinterpret_cast<qulonglong>(newConnection)), newConnection); + QDBusConnectionManager::instance()->setConnection(QLatin1String("QDBusServer-") + QString::number(reinterpret_cast<qulonglong>(newConnection), 16), newConnection); serverConnection->serverConnectionNames << newConnection->name; // setPeer does the error handling for us @@ -986,12 +988,10 @@ void QDBusConnectionPrivate::deliverCall(QObject *object, int /*flags*/, const Q // FIXME: save the old sender! QDBusContextPrivate context(QDBusConnection(this), msg); QDBusContextPrivate *old = QDBusContextPrivate::set(object, &context); - QDBusConnectionPrivate::setSender(this); QPointer<QObject> ptr = object; fail = object->qt_metacall(QMetaObject::InvokeMetaMethod, slotIdx, params.data()) >= 0; - QDBusConnectionPrivate::setSender(0); // the object might be deleted in the slot if (!ptr.isNull()) QDBusContextPrivate::set(object, old); @@ -1025,7 +1025,7 @@ QDBusConnectionPrivate::QDBusConnectionPrivate(QObject *p) { static const bool threads = q_dbus_threads_init_default(); if (::isDebugging == -1) - ::isDebugging = qgetenv("QDBUS_DEBUG").toInt(); + ::isDebugging = qEnvironmentVariableIntValue("QDBUS_DEBUG"); Q_UNUSED(threads) #ifdef QDBUS_THREAD_DEBUG diff --git a/src/dbus/qdbusintegrator_p.h b/src/dbus/qdbusintegrator_p.h index 38aad9fa86..116d77cca6 100644 --- a/src/dbus/qdbusintegrator_p.h +++ b/src/dbus/qdbusintegrator_p.h @@ -90,7 +90,7 @@ public: : QMetaCallEvent(0, id, 0, sender, -1), connection(c), message(msg), metaTypes(types), flags(f) { } - void placeMetaCall(QObject *object) + void placeMetaCall(QObject *object) Q_DECL_OVERRIDE { QDBusConnectionPrivate::d(connection)->deliverCall(object, flags, message, metaTypes, id()); } @@ -113,7 +113,7 @@ public: { } ~QDBusActivateObjectEvent(); - void placeMetaCall(QObject *); + void placeMetaCall(QObject *) Q_DECL_OVERRIDE; private: QDBusConnection connection; // just for refcounting diff --git a/src/dbus/qdbusinterface.h b/src/dbus/qdbusinterface.h index 04adaced88..8e6fe02f1f 100644 --- a/src/dbus/qdbusinterface.h +++ b/src/dbus/qdbusinterface.h @@ -55,9 +55,9 @@ public: QObject *parent = 0); ~QDBusInterface(); - virtual const QMetaObject *metaObject() const; - virtual void *qt_metacast(const char *); - virtual int qt_metacall(QMetaObject::Call, int, void **); + virtual const QMetaObject *metaObject() const Q_DECL_OVERRIDE; + virtual void *qt_metacast(const char *) Q_DECL_OVERRIDE; + virtual int qt_metacall(QMetaObject::Call, int, void **) Q_DECL_OVERRIDE; private: Q_DECLARE_PRIVATE(QDBusInterface) diff --git a/src/dbus/qdbusmarshaller.cpp b/src/dbus/qdbusmarshaller.cpp index 0e21e2f282..60b6db6aa6 100644 --- a/src/dbus/qdbusmarshaller.cpp +++ b/src/dbus/qdbusmarshaller.cpp @@ -62,55 +62,65 @@ inline QString QDBusMarshaller::currentSignature() inline void QDBusMarshaller::append(uchar arg) { - qIterAppend(&iterator, ba, DBUS_TYPE_BYTE, &arg); + if (!skipSignature) + qIterAppend(&iterator, ba, DBUS_TYPE_BYTE, &arg); } inline void QDBusMarshaller::append(bool arg) { dbus_bool_t cast = arg; - qIterAppend(&iterator, ba, DBUS_TYPE_BOOLEAN, &cast); + if (!skipSignature) + qIterAppend(&iterator, ba, DBUS_TYPE_BOOLEAN, &cast); } inline void QDBusMarshaller::append(short arg) { - qIterAppend(&iterator, ba, DBUS_TYPE_INT16, &arg); + if (!skipSignature) + qIterAppend(&iterator, ba, DBUS_TYPE_INT16, &arg); } inline void QDBusMarshaller::append(ushort arg) { - qIterAppend(&iterator, ba, DBUS_TYPE_UINT16, &arg); + if (!skipSignature) + qIterAppend(&iterator, ba, DBUS_TYPE_UINT16, &arg); } inline void QDBusMarshaller::append(int arg) { - qIterAppend(&iterator, ba, DBUS_TYPE_INT32, &arg); + if (!skipSignature) + qIterAppend(&iterator, ba, DBUS_TYPE_INT32, &arg); } inline void QDBusMarshaller::append(uint arg) { - qIterAppend(&iterator, ba, DBUS_TYPE_UINT32, &arg); + if (!skipSignature) + qIterAppend(&iterator, ba, DBUS_TYPE_UINT32, &arg); } inline void QDBusMarshaller::append(qlonglong arg) { - qIterAppend(&iterator, ba, DBUS_TYPE_INT64, &arg); + if (!skipSignature) + qIterAppend(&iterator, ba, DBUS_TYPE_INT64, &arg); } inline void QDBusMarshaller::append(qulonglong arg) { - qIterAppend(&iterator, ba, DBUS_TYPE_UINT64, &arg); + if (!skipSignature) + qIterAppend(&iterator, ba, DBUS_TYPE_UINT64, &arg); } inline void QDBusMarshaller::append(double arg) { - qIterAppend(&iterator, ba, DBUS_TYPE_DOUBLE, &arg); + if (!skipSignature) + qIterAppend(&iterator, ba, DBUS_TYPE_DOUBLE, &arg); } void QDBusMarshaller::append(const QString &arg) { QByteArray data = arg.toUtf8(); const char *cdata = data.constData(); - qIterAppend(&iterator, ba, DBUS_TYPE_STRING, &cdata); + if (!skipSignature) + qIterAppend(&iterator, ba, DBUS_TYPE_STRING, &cdata); } inline void QDBusMarshaller::append(const QDBusObjectPath &arg) @@ -120,7 +130,8 @@ inline void QDBusMarshaller::append(const QDBusObjectPath &arg) error(QLatin1String("Invalid object path passed in arguments")); } else { const char *cdata = data.constData(); - qIterAppend(&iterator, ba, DBUS_TYPE_OBJECT_PATH, &cdata); + if (!skipSignature) + qIterAppend(&iterator, ba, DBUS_TYPE_OBJECT_PATH, &cdata); } } @@ -131,7 +142,8 @@ inline void QDBusMarshaller::append(const QDBusSignature &arg) error(QLatin1String("Invalid signature passed in arguments")); } else { const char *cdata = data.constData(); - qIterAppend(&iterator, ba, DBUS_TYPE_SIGNATURE, &cdata); + if (!skipSignature) + qIterAppend(&iterator, ba, DBUS_TYPE_SIGNATURE, &cdata); } } @@ -141,14 +153,16 @@ inline void QDBusMarshaller::append(const QDBusUnixFileDescriptor &arg) if (!ba && fd == -1) { error(QLatin1String("Invalid file descriptor passed in arguments")); } else { - qIterAppend(&iterator, ba, DBUS_TYPE_UNIX_FD, &fd); + if (!skipSignature) + qIterAppend(&iterator, ba, DBUS_TYPE_UNIX_FD, &fd); } } inline void QDBusMarshaller::append(const QByteArray &arg) { if (ba) { - *ba += DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING; + if (!skipSignature) + *ba += DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING; return; } @@ -163,7 +177,8 @@ inline void QDBusMarshaller::append(const QByteArray &arg) inline bool QDBusMarshaller::append(const QDBusVariant &arg) { if (ba) { - *ba += DBUS_TYPE_VARIANT_AS_STRING; + if (!skipSignature) + *ba += DBUS_TYPE_VARIANT_AS_STRING; return true; } @@ -206,7 +221,8 @@ inline bool QDBusMarshaller::append(const QDBusVariant &arg) inline void QDBusMarshaller::append(const QStringList &arg) { if (ba) { - *ba += DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING; + if (!skipSignature) + *ba += DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING; return; } @@ -288,25 +304,30 @@ void QDBusMarshaller::open(QDBusMarshaller &sub, int code, const char *signature sub.ba = ba; sub.ok = true; sub.capabilities = capabilities; + sub.skipSignature = skipSignature; - if (ba) - switch (code) { - case DBUS_TYPE_ARRAY: - *ba += char(code); - *ba += signature; - // fall through - - case DBUS_TYPE_DICT_ENTRY: - sub.closeCode = 0; - break; - - case DBUS_TYPE_STRUCT: - *ba += DBUS_STRUCT_BEGIN_CHAR; - sub.closeCode = DBUS_STRUCT_END_CHAR; - break; + if (ba) { + if (!skipSignature) { + switch (code) { + case DBUS_TYPE_ARRAY: + *ba += char(code); + *ba += signature; + // fall through + + case DBUS_TYPE_DICT_ENTRY: + sub.closeCode = 0; + sub.skipSignature = true; + break; + + case DBUS_TYPE_STRUCT: + *ba += DBUS_STRUCT_BEGIN_CHAR; + sub.closeCode = DBUS_STRUCT_END_CHAR; + break; + } } - else + } else { q_dbus_message_iter_open_container(&iterator, code, signature, &sub.iterator); + } } QDBusMarshaller *QDBusMarshaller::beginCommon(int code, const char *signature) @@ -338,7 +359,7 @@ QDBusMarshaller *QDBusMarshaller::endCommon() void QDBusMarshaller::close() { if (ba) { - if (closeCode) + if (!skipSignature && closeCode) *ba += closeCode; } else if (parent) { q_dbus_message_iter_close_container(&parent->iterator, &iterator); diff --git a/src/dbus/qdbusmessage.cpp b/src/dbus/qdbusmessage.cpp index 25206b4bb7..206d6a4b2a 100644 --- a/src/dbus/qdbusmessage.cpp +++ b/src/dbus/qdbusmessage.cpp @@ -49,14 +49,20 @@ QT_BEGIN_NAMESPACE +Q_STATIC_ASSERT(QDBusMessage::InvalidMessage == DBUS_MESSAGE_TYPE_INVALID); +Q_STATIC_ASSERT(QDBusMessage::MethodCallMessage == DBUS_MESSAGE_TYPE_METHOD_CALL); +Q_STATIC_ASSERT(QDBusMessage::ReplyMessage == DBUS_MESSAGE_TYPE_METHOD_RETURN); +Q_STATIC_ASSERT(QDBusMessage::ErrorMessage == DBUS_MESSAGE_TYPE_ERROR); +Q_STATIC_ASSERT(QDBusMessage::SignalMessage == DBUS_MESSAGE_TYPE_SIGNAL); + static inline const char *data(const QByteArray &arr) { return arr.isEmpty() ? 0 : arr.constData(); } QDBusMessagePrivate::QDBusMessagePrivate() - : msg(0), reply(0), type(DBUS_MESSAGE_TYPE_INVALID), - timeout(-1), localReply(0), ref(1), delayedReply(false), localMessage(false), + : msg(0), reply(0), localReply(0), ref(1), type(QDBusMessage::InvalidMessage), + delayedReply(false), localMessage(false), parametersValidated(false), autoStartService(true) { } @@ -106,10 +112,10 @@ DBusMessage *QDBusMessagePrivate::toDBusMessage(const QDBusMessage &message, QDB const QDBusMessagePrivate *d_ptr = message.d_ptr; switch (d_ptr->type) { - case DBUS_MESSAGE_TYPE_INVALID: + case QDBusMessage::InvalidMessage: //qDebug() << "QDBusMessagePrivate::toDBusMessage" << "message is invalid"; break; - case DBUS_MESSAGE_TYPE_METHOD_CALL: + case QDBusMessage::MethodCallMessage: // only service and interface can be empty -> path and name must not be empty if (!d_ptr->parametersValidated) { if (!QDBusUtil::checkBusName(d_ptr->service, QDBusUtil::EmptyAllowed, error)) @@ -126,14 +132,14 @@ DBusMessage *QDBusMessagePrivate::toDBusMessage(const QDBusMessage &message, QDB data(d_ptr->interface.toUtf8()), d_ptr->name.toUtf8()); q_dbus_message_set_auto_start( msg, d_ptr->autoStartService ); break; - case DBUS_MESSAGE_TYPE_METHOD_RETURN: + case QDBusMessage::ReplyMessage: msg = q_dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN); if (!d_ptr->localMessage) { q_dbus_message_set_destination(msg, q_dbus_message_get_sender(d_ptr->reply)); q_dbus_message_set_reply_serial(msg, q_dbus_message_get_serial(d_ptr->reply)); } break; - case DBUS_MESSAGE_TYPE_ERROR: + case QDBusMessage::ErrorMessage: // error name can't be empty if (!d_ptr->parametersValidated && !QDBusUtil::checkErrorName(d_ptr->name, QDBusUtil::EmptyNotAllowed, error)) @@ -146,7 +152,7 @@ DBusMessage *QDBusMessagePrivate::toDBusMessage(const QDBusMessage &message, QDB q_dbus_message_set_reply_serial(msg, q_dbus_message_get_serial(d_ptr->reply)); } break; - case DBUS_MESSAGE_TYPE_SIGNAL: + case QDBusMessage::SignalMessage: // nothing can be empty here if (!d_ptr->parametersValidated) { if (!QDBusUtil::checkObjectPath(d_ptr->path, QDBusUtil::EmptyNotAllowed, error)) @@ -160,9 +166,6 @@ 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()); break; - default: - Q_ASSERT(false); - break; } // if we got here, the parameters validated @@ -221,7 +224,7 @@ QDBusMessage QDBusMessagePrivate::fromDBusMessage(DBusMessage *dmsg, QDBusConnec if (!dmsg) return message; - message.d_ptr->type = q_dbus_message_get_type(dmsg); + message.d_ptr->type = QDBusMessage::MessageType(q_dbus_message_get_type(dmsg)); message.d_ptr->path = QString::fromUtf8(q_dbus_message_get_path(dmsg)); message.d_ptr->interface = QString::fromUtf8(q_dbus_message_get_interface(dmsg)); message.d_ptr->name = message.d_ptr->type == DBUS_MESSAGE_TYPE_ERROR ? @@ -360,7 +363,7 @@ QDBusMessage QDBusMessage::createSignal(const QString &path, const QString &inte const QString &name) { QDBusMessage message; - message.d_ptr->type = DBUS_MESSAGE_TYPE_SIGNAL; + message.d_ptr->type = SignalMessage; message.d_ptr->path = path; message.d_ptr->interface = interface; message.d_ptr->name = name; @@ -391,7 +394,7 @@ QDBusMessage QDBusMessage::createMethodCall(const QString &service, const QStrin const QString &interface, const QString &method) { QDBusMessage message; - message.d_ptr->type = DBUS_MESSAGE_TYPE_METHOD_CALL; + message.d_ptr->type = MethodCallMessage; message.d_ptr->service = service; message.d_ptr->path = path; message.d_ptr->interface = interface; @@ -407,7 +410,7 @@ QDBusMessage QDBusMessage::createMethodCall(const QString &service, const QStrin QDBusMessage QDBusMessage::createError(const QString &name, const QString &msg) { QDBusMessage error; - error.d_ptr->type = DBUS_MESSAGE_TYPE_ERROR; + error.d_ptr->type = ErrorMessage; error.d_ptr->name = name; error.d_ptr->message = msg; @@ -437,7 +440,7 @@ QDBusMessage QDBusMessage::createReply(const QVariantList &arguments) const { QDBusMessage reply; reply.setArguments(arguments); - reply.d_ptr->type = DBUS_MESSAGE_TYPE_METHOD_RETURN; + reply.d_ptr->type = ReplyMessage; if (d_ptr->msg) reply.d_ptr->reply = q_dbus_message_ref(d_ptr->msg); if (d_ptr->localMessage) { @@ -606,7 +609,7 @@ QString QDBusMessage::signature() const bool QDBusMessage::isReplyRequired() const { // Only method calls can have replies - if (d_ptr->type != DBUS_MESSAGE_TYPE_METHOD_CALL) + if (d_ptr->type != QDBusMessage::MethodCallMessage) return false; if (!d_ptr->msg) diff --git a/src/dbus/qdbusmessage_p.h b/src/dbus/qdbusmessage_p.h index 08f6d4bbfa..2c72c1befe 100644 --- a/src/dbus/qdbusmessage_p.h +++ b/src/dbus/qdbusmessage_p.h @@ -72,10 +72,9 @@ public: DBusMessage *msg; DBusMessage *reply; - int type; - int timeout; mutable QDBusMessage *localReply; QAtomicInt ref; + QDBusMessage::MessageType type; mutable uint delayedReply : 1; uint localMessage : 1; diff --git a/src/dbus/qdbusmetaobject.cpp b/src/dbus/qdbusmetaobject.cpp index 9f07817df0..2d009ebfca 100644 --- a/src/dbus/qdbusmetaobject.cpp +++ b/src/dbus/qdbusmetaobject.cpp @@ -123,17 +123,6 @@ QDBusMetaObjectGenerator::QDBusMetaObjectGenerator(const QString &interfaceName, static int registerComplexDBusType(const char *typeName) { struct QDBusRawTypeHandler { - static void destroy(void *) - { - qFatal("Cannot destroy placeholder type QDBusRawType"); - } - - static void *create(const void *) - { - qFatal("Cannot create placeholder type QDBusRawType"); - return 0; - } - static void destruct(void *) { qFatal("Cannot destruct placeholder type QDBusRawType"); @@ -146,8 +135,7 @@ static int registerComplexDBusType(const char *typeName) } }; - return QMetaType::registerNormalizedType(typeName, QDBusRawTypeHandler::destroy, - QDBusRawTypeHandler::create, + return QMetaType::registerNormalizedType(typeName, QDBusRawTypeHandler::destruct, QDBusRawTypeHandler::construct, sizeof(void *), @@ -516,7 +504,7 @@ void QDBusMetaObjectGenerator::write(QDBusMetaObject *obj) } Q_ASSERT(offset == header->methodData + header->methodCount * 5); - Q_ASSERT(parametersOffset = header->propertyData); + Q_ASSERT(parametersOffset == header->propertyData); Q_ASSERT(signatureOffset == header->methodDBusData + header->methodCount * intsPerMethod); Q_ASSERT(typeidOffset == idata.size()); offset += methodParametersDataSize; diff --git a/src/dbus/qdbuspendingreply.h b/src/dbus/qdbuspendingreply.h index 2f7932af2f..8558c0a51d 100644 --- a/src/dbus/qdbuspendingreply.h +++ b/src/dbus/qdbuspendingreply.h @@ -139,9 +139,8 @@ public: inline int count() const { return Count; } -#if defined(Q_QDOC) || defined(Q_NO_USING_KEYWORD) - inline QVariant argumentAt(int index) const - { return QDBusPendingReplyData::argumentAt(index); } +#if defined(Q_QDOC) + QVariant argumentAt(int index) const; #else using QDBusPendingReplyData::argumentAt; #endif |