From 4eb5b11af789ad30f9e20b0527562d73825e6f33 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sun, 23 Apr 2006 19:04:53 +0000 Subject: * qt/qdbusconnection_p.h: * qt/qdbusmetaobject.cpp: * qt/qdbusmetaobject_p.h: * qt/qdbusintegrator.cpp: Use the new merged-interface mode for the dynamic meta object. No need to guess which interface to call. * qt/qdbusabstractinterface_p.h: * qt/qdbusconnection.cpp: * qt/qdbusintegrator.cpp: * qt/qdbusinterface.cpp: * qt/qdbusinterface.h: Make findInterface always return a non-null pointer. Add a QDBusRef that looks and behaves like DCOPRef. --- qt/qdbusmetaobject.cpp | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) (limited to 'qt/qdbusmetaobject.cpp') diff --git a/qt/qdbusmetaobject.cpp b/qt/qdbusmetaobject.cpp index ccc38652..2992c703 100644 --- a/qt/qdbusmetaobject.cpp +++ b/qt/qdbusmetaobject.cpp @@ -437,7 +437,7 @@ void QDBusMetaObjectGenerator::writeWithoutXml(const QString &interface) ///////// // class QDBusMetaObject -QDBusMetaObject *QDBusMetaObject::createMetaObject(QString &interface, const QString &xml, +QDBusMetaObject *QDBusMetaObject::createMetaObject(const QString &interface, const QString &xml, QHash &cache, QDBusError &error) { @@ -462,15 +462,9 @@ QDBusMetaObject *QDBusMetaObject::createMetaObject(QString &interface, const QSt } - if (it.key() == interface) { + if (it.key() == interface) // it's us we = obj; - } else if (interface.isEmpty() && - !it.key().startsWith(QLatin1String("org.freedesktop.DBus."))) { - // also us - we = obj; - interface = it.key(); - } } if (we) @@ -484,6 +478,26 @@ QDBusMetaObject *QDBusMetaObject::createMetaObject(QString &interface, const QSt generator.write(we); we->cached = false; return we; + } else if (interface.isEmpty()) { + // merge all interfaces + it = parsed.constBegin(); + QDBusIntrospection::Interface merged = *it.value().constData(); + + for (++it; it != end; ++it) { + merged.annotations.unite(it.value()->annotations); + merged.methods.unite(it.value()->methods); + merged.signals_.unite(it.value()->signals_); + merged.properties.unite(it.value()->properties); + } + + merged.name = QLatin1String("local.Merged"); + merged.introspection.clear(); + + we = new QDBusMetaObject; + QDBusMetaObjectGenerator generator(merged.name, &merged); + generator.write(we); + we->cached = false; + return we; } // mark as an error -- cgit