summaryrefslogtreecommitdiffstats
path: root/qt/qdbusmetaobject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt/qdbusmetaobject.cpp')
-rw-r--r--qt/qdbusmetaobject.cpp30
1 files changed, 22 insertions, 8 deletions
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<QString, QDBusMetaObject *> &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