summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKent Hansen <kent.hansen@nokia.com>2012-02-18 21:33:28 +0100
committerQt by Nokia <qt-info@nokia.com>2012-02-20 15:17:08 +0100
commitbdc775661733419aeef17e31c934c40d7f065d4e (patch)
treec0f22884fc19fde629188fbf53cf36f01b881d0d /src
parent441f89befac959b01e406d3bfae0d8db133a7cf9 (diff)
Port QDBusAdaptorConnector meta-object to revision 6
We want to drop support for old revisions in Qt 5. This commit brings the QDBusAdaptorConnector meta-object in sync with current moc output. The QtDBus implementation was assuming that the relaySlot() slot would be created at index methodOffset() in the meta-object, but since revision 4 that's no longer the case (signals always come first). Made the code more robust by actually querying the meta-object what the index is. Change-Id: Ie0791680cc2e9e5fb1472c4462c391f92ea22ea6 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src')
-rw-r--r--src/dbus/qdbusabstractadaptor.cpp71
-rw-r--r--src/dbus/qdbusabstractadaptor_p.h3
2 files changed, 53 insertions, 21 deletions
diff --git a/src/dbus/qdbusabstractadaptor.cpp b/src/dbus/qdbusabstractadaptor.cpp
index 9eae45b34b..7bdd947a37 100644
--- a/src/dbus/qdbusabstractadaptor.cpp
+++ b/src/dbus/qdbusabstractadaptor.cpp
@@ -57,6 +57,17 @@
QT_BEGIN_NAMESPACE
+static int cachedRelaySlotMethodIndex = -1;
+
+int QDBusAdaptorConnector::relaySlotMethodIndex()
+{
+ if (cachedRelaySlotMethodIndex == -1) {
+ cachedRelaySlotMethodIndex = staticMetaObject.indexOfMethod("relaySlot()");
+ Q_ASSERT(cachedRelaySlotMethodIndex != -1);
+ }
+ return cachedRelaySlotMethodIndex;
+}
+
QDBusAdaptorConnector *qDBusFindAdaptorConnector(QObject *obj)
{
if (!obj)
@@ -237,12 +248,12 @@ void QDBusAdaptorConnector::addAdaptor(QDBusAbstractAdaptor *adaptor)
void QDBusAdaptorConnector::disconnectAllSignals(QObject *obj)
{
- QMetaObject::disconnect(obj, -1, this, metaObject()->methodOffset());
+ QMetaObject::disconnect(obj, -1, this, relaySlotMethodIndex());
}
void QDBusAdaptorConnector::connectAllSignals(QObject *obj)
{
- QMetaObject::connect(obj, -1, this, metaObject()->methodOffset(), Qt::DirectConnection);
+ QMetaObject::connect(obj, -1, this, relaySlotMethodIndex(), Qt::DirectConnection);
}
void QDBusAdaptorConnector::polish()
@@ -310,37 +321,58 @@ void QDBusAdaptorConnector::relay(QObject *senderObj, int lastSignalIdx, void **
// our Meta Object
// modify carefully: this has been hand-edited!
-// the relaySlot slot has local ID 0 (we use this when calling QMetaObject::connect)
-// it also gets called with the void** array
+// the relaySlot slot gets called with the void** array
static const uint qt_meta_data_QDBusAdaptorConnector[] = {
+
// content:
- 1, // revision
+ 6, // revision
0, // classname
0, 0, // classinfo
- 3, 10, // methods
+ 3, 14, // methods
0, 0, // properties
0, 0, // enums/sets
-
- // slots: signature, parameters, type, tag, flags
- 106, 22, 22, 22, 0x0a,
- 118, 22, 22, 22, 0x0a,
+ 0, 0, // constructors
+ 0, // flags
+ 1, // signalCount
// signals: signature, parameters, type, tag, flags
47, 23, 22, 22, 0x05,
+ // slots: signature, parameters, type, tag, flags
+ 105, 22, 22, 22, 0x0a,
+ 117, 22, 22, 22, 0x0a,
+
0 // eod
};
static const char qt_meta_stringdata_QDBusAdaptorConnector[] = {
- "QDBusAdaptorConnector\0\0obj,metaobject,sid,args\0"
- "relaySignal(QObject*,const QMetaObject*,int,QVariantList)\0\0relaySlot()\0"
- "polish()\0"
+ "QDBusAdaptorConnector\0\0obj,metaObject,sid,args\0"
+ "relaySignal(QObject*,const QMetaObject*,int,QVariantList)\0"
+ "relaySlot()\0polish()\0"
+};
+
+void QDBusAdaptorConnector::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ Q_ASSERT(staticMetaObject.cast(_o));
+ QDBusAdaptorConnector *_t = static_cast<QDBusAdaptorConnector *>(_o);
+ switch (_id) {
+ case 0: _t->relaySignal((*reinterpret_cast< QObject*(*)>(_a[1])),(*reinterpret_cast< const QMetaObject*(*)>(_a[2])),(*reinterpret_cast< int(*)>(_a[3])),(*reinterpret_cast< const QVariantList(*)>(_a[4]))); break;
+ case 1: _t->relaySlot(_a); break; // HAND EDIT: add the _a parameter
+ case 2: _t->polish(); break;
+ default: ;
+ }
+ }
+}
+
+const QMetaObjectExtraData QDBusAdaptorConnector::staticMetaObjectExtraData = {
+ 0, qt_static_metacall
};
const QMetaObject QDBusAdaptorConnector::staticMetaObject = {
{ &QObject::staticMetaObject, qt_meta_stringdata_QDBusAdaptorConnector,
- qt_meta_data_QDBusAdaptorConnector, 0 }
+ qt_meta_data_QDBusAdaptorConnector, &staticMetaObjectExtraData }
};
const QMetaObject *QDBusAdaptorConnector::metaObject() const
@@ -352,7 +384,7 @@ void *QDBusAdaptorConnector::qt_metacast(const char *_clname)
{
if (!_clname) return 0;
if (!strcmp(_clname, qt_meta_stringdata_QDBusAdaptorConnector))
- return static_cast<void*>(const_cast<QDBusAdaptorConnector*>(this));
+ return static_cast<void*>(const_cast< QDBusAdaptorConnector*>(this));
return QObject::qt_metacast(_clname);
}
@@ -362,11 +394,8 @@ int QDBusAdaptorConnector::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
- switch (_id) {
- case 0: relaySlot(_a); break; // HAND EDIT: add the _a parameter
- case 1: polish(); break;
- case 2: relaySignal((*reinterpret_cast< QObject*(*)>(_a[1])),(*reinterpret_cast< const QMetaObject*(*)>(_a[2])),(*reinterpret_cast< int(*)>(_a[3])),(*reinterpret_cast< const QVariantList(*)>(_a[4]))); break;
- }
+ if (_id < 3)
+ qt_static_metacall(this, _c, _id, _a);
_id -= 3;
}
return _id;
@@ -376,7 +405,7 @@ int QDBusAdaptorConnector::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
void QDBusAdaptorConnector::relaySignal(QObject * _t1, const QMetaObject * _t2, int _t3, const QVariantList & _t4)
{
void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)), const_cast<void*>(reinterpret_cast<const void*>(&_t2)), const_cast<void*>(reinterpret_cast<const void*>(&_t3)), const_cast<void*>(reinterpret_cast<const void*>(&_t4)) };
- QMetaObject::activate(this, &staticMetaObject, 2, _a);
+ QMetaObject::activate(this, &staticMetaObject, 0, _a);
}
QT_END_NAMESPACE
diff --git a/src/dbus/qdbusabstractadaptor_p.h b/src/dbus/qdbusabstractadaptor_p.h
index a0b61e1887..9b10f03eda 100644
--- a/src/dbus/qdbusabstractadaptor_p.h
+++ b/src/dbus/qdbusabstractadaptor_p.h
@@ -127,6 +127,9 @@ protected:
public: // member variables
AdaptorMap adaptors;
bool waitingForPolish : 1;
+
+private:
+ static int relaySlotMethodIndex();
};
extern QDBusAdaptorConnector *qDBusFindAdaptorConnector(QObject *object);