summaryrefslogtreecommitdiffstats
path: root/src/dbus
diff options
context:
space:
mode:
Diffstat (limited to 'src/dbus')
-rw-r--r--src/dbus/qdbus_symbols_p.h78
-rw-r--r--src/dbus/qdbusabstractinterface.h6
-rw-r--r--src/dbus/qdbusargument_p.h3
-rw-r--r--src/dbus/qdbusconnection.cpp35
-rw-r--r--src/dbus/qdbusconnection.h7
-rw-r--r--src/dbus/qdbusconnection_p.h6
-rw-r--r--src/dbus/qdbusconnectioninterface.h4
-rw-r--r--src/dbus/qdbusconnectionmanager_p.h3
-rw-r--r--src/dbus/qdbusintegrator.cpp8
-rw-r--r--src/dbus/qdbusintegrator_p.h4
-rw-r--r--src/dbus/qdbusinterface.h6
-rw-r--r--src/dbus/qdbusmarshaller.cpp87
-rw-r--r--src/dbus/qdbusmessage.cpp35
-rw-r--r--src/dbus/qdbusmessage_p.h3
-rw-r--r--src/dbus/qdbusmetaobject.cpp16
-rw-r--r--src/dbus/qdbuspendingreply.h5
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