diff options
Diffstat (limited to 'qt/qdbusmetaobject.cpp')
| -rw-r--r-- | qt/qdbusmetaobject.cpp | 30 | 
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 | 
