summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2012-07-20 10:34:27 +0200
committerQt by Nokia <qt-info@nokia.com>2012-07-24 20:11:05 +0200
commite9ecf1b420d8f0fc4393cbfdea2fe731409d83c6 (patch)
treed9a13f2e48954c6dac35f6b43d3fabc6ebbc831f /src
parent95232af3effab1f722c31e136c59fdd4ae3967b1 (diff)
QtDBus: use qMetaTypeId<T>() instead of qRegisterMetaType<T>("T")
Using qMetaTypeId<T> has the advantage that multiple calls during a program run are much more efficient, since an inlined atomic is used to store the result. It also ensures that Q_DECLARE_METATYPE(T) has been used, whereas qRegisterMetaType<T> (the unary version) will happily register anything. Had to add a proper default constructor to QDBusError, as the one doubling as the default constructor wasn't available under QT_BOOTSTRAP, but Q_DECLARE_METATYPE requires a default ctor. Also changed a nullary qRegisterMetaType() to qMetaTypeId() in qDBusRegisterMetaType(). They're equivalent, since the former just calls the latter, but apart from the miniscule optimisation that the compiler has to instantiate one function less, the result is also used, so using qMetaTypeId() better expresses what 'id' is. Change-Id: Ib9dde17923ab9ee55f9464138a625ab8cd55c482 Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/dbus/qdbuserror.cpp10
-rw-r--r--src/dbus/qdbuserror.h5
-rw-r--r--src/dbus/qdbusmessage.h2
-rw-r--r--src/dbus/qdbusmetatype.cpp16
-rw-r--r--src/dbus/qdbusmetatype.h2
5 files changed, 25 insertions, 10 deletions
diff --git a/src/dbus/qdbuserror.cpp b/src/dbus/qdbuserror.cpp
index b81d8a68f6..85d7d016ff 100644
--- a/src/dbus/qdbuserror.cpp
+++ b/src/dbus/qdbuserror.cpp
@@ -250,6 +250,16 @@ static inline QDBusError::ErrorType get(const char *name)
\value InvalidInterface The interface is invalid.
*/
+/*!
+ \internal
+ Constructs a QDBusError that represents no error.
+*/
+QDBusError::QDBusError()
+ : code(NoError)
+{
+
+}
+
#ifndef QT_BOOTSTRAPPED
/*!
\internal
diff --git a/src/dbus/qdbuserror.h b/src/dbus/qdbuserror.h
index a6b3c9a70a..52e65d677d 100644
--- a/src/dbus/qdbuserror.h
+++ b/src/dbus/qdbuserror.h
@@ -95,8 +95,9 @@ public:
#endif
};
+ QDBusError();
#ifndef QT_BOOTSTRAPPED
- explicit QDBusError(const DBusError *error = 0);
+ explicit QDBusError(const DBusError *error);
/*implicit*/ QDBusError(const QDBusMessage& msg);
#endif
QDBusError(ErrorType error, const QString &message);
@@ -126,6 +127,8 @@ Q_DBUS_EXPORT QDebug operator<<(QDebug, const QDBusError &);
QT_END_NAMESPACE
+Q_DECLARE_METATYPE(QDBusError)
+
QT_END_HEADER
#endif // QT_NO_DBUS
diff --git a/src/dbus/qdbusmessage.h b/src/dbus/qdbusmessage.h
index 20859ebb70..461a27600e 100644
--- a/src/dbus/qdbusmessage.h
+++ b/src/dbus/qdbusmessage.h
@@ -124,6 +124,8 @@ Q_DBUS_EXPORT QDebug operator<<(QDebug, const QDBusMessage &);
QT_END_NAMESPACE
+Q_DECLARE_METATYPE(QDBusMessage)
+
QT_END_HEADER
#endif // QT_NO_DBUS
diff --git a/src/dbus/qdbusmetatype.cpp b/src/dbus/qdbusmetatype.cpp
index 5c8a7bc08f..835fa4fa43 100644
--- a/src/dbus/qdbusmetatype.cpp
+++ b/src/dbus/qdbusmetatype.cpp
@@ -105,15 +105,15 @@ void QDBusMetaTypeId::init()
// set the guard variable at the end
if (!initialized) {
#ifndef QT_BOOTSTRAPPED
- // register our types with QtCore
- message = qRegisterMetaType<QDBusMessage>("QDBusMessage");
- error = qRegisterMetaType<QDBusError>("QDBusError");
+ // register our types with QtCore (calling qMetaTypeId<T>() does this implicitly)
+ message = qMetaTypeId<QDBusMessage>();
+ error = qMetaTypeId<QDBusError>();
#endif
- argument = qRegisterMetaType<QDBusArgument>("QDBusArgument");
- variant = qRegisterMetaType<QDBusVariant>("QDBusVariant");
- objectpath = qRegisterMetaType<QDBusObjectPath>("QDBusObjectPath");
- signature = qRegisterMetaType<QDBusSignature>("QDBusSignature");
- unixfd = qRegisterMetaType<QDBusUnixFileDescriptor>("QDBusUnixFileDescriptor");
+ argument = qMetaTypeId<QDBusArgument>();
+ variant = qMetaTypeId<QDBusVariant>();
+ objectpath = qMetaTypeId<QDBusObjectPath>();
+ signature = qMetaTypeId<QDBusSignature>();
+ unixfd = qMetaTypeId<QDBusUnixFileDescriptor>();
#ifndef QDBUS_NO_SPECIALTYPES
// and register QtCore's with us
diff --git a/src/dbus/qdbusmetatype.h b/src/dbus/qdbusmetatype.h
index bb791c9636..060e8adf2e 100644
--- a/src/dbus/qdbusmetatype.h
+++ b/src/dbus/qdbusmetatype.h
@@ -84,7 +84,7 @@ int qDBusRegisterMetaType(
void (*mf)(QDBusArgument &, const T *) = qDBusMarshallHelper<T>;
void (*df)(const QDBusArgument &, T *) = qDBusDemarshallHelper<T>;
- int id = qRegisterMetaType<T>(); // make sure it's registered
+ int id = qMetaTypeId<T>(); // make sure it's registered
QDBusMetaType::registerMarshallOperators(id,
reinterpret_cast<QDBusMetaType::MarshallFunction>(mf),
reinterpret_cast<QDBusMetaType::DemarshallFunction>(df));