diff options
author | Thiago Macieira <thiago@kde.org> | 2006-04-23 19:04:53 +0000 |
---|---|---|
committer | Thiago Macieira <thiago@kde.org> | 2006-04-23 19:04:53 +0000 |
commit | 4eb5b11af789ad30f9e20b0527562d73825e6f33 (patch) | |
tree | fda09fd92b76602dd0dcb7e7130f08e850a6dc13 /qt/qdbusintegrator.cpp | |
parent | bed69341bb0e0e087bd7429413c32185916feef4 (diff) |
* 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.
Diffstat (limited to 'qt/qdbusintegrator.cpp')
-rw-r--r-- | qt/qdbusintegrator.cpp | 45 |
1 files changed, 31 insertions, 14 deletions
diff --git a/qt/qdbusintegrator.cpp b/qt/qdbusintegrator.cpp index 4a72d197..4dabd435 100644 --- a/qt/qdbusintegrator.cpp +++ b/qt/qdbusintegrator.cpp @@ -1474,27 +1474,44 @@ QDBusConnectionPrivate::findInterface(const QString &service, const QString &path, const QString &interface) { - - if (!connection || !QDBusUtil::isValidObjectPath(path)) - return 0; - if (!interface.isEmpty() && !QDBusUtil::isValidInterfaceName(interface)) - return 0; - // check if it's there first -- FIXME: add binding mode + QDBusMetaObject *mo = 0; QString owner = getNameOwner(service); - if (owner.isEmpty()) - return 0; + if (connection && !owner.isEmpty() && QDBusUtil::isValidObjectPath(path) && + (interface.isEmpty() || QDBusUtil::isValidInterfaceName(interface))) + mo = findMetaObject(owner, path, interface); + + QDBusInterfacePrivate *p = new QDBusInterfacePrivate(QDBusConnection(name), this, owner, path, interface, mo); + + if (!mo) { + // invalid object + p->isValid = false; + p->lastError = lastError; + if (!lastError.isValid()) { + // try to determine why we couldn't get the data + if (!connection) + p->lastError = QDBusError(QDBusError::Disconnected, + QLatin1String("Not connected to D-Bus server")); + else if (owner.isEmpty()) + p->lastError = QDBusError(QDBusError::ServiceUnknown, + QString(QLatin1String("Service %1 is unknown")).arg(service)); + else if (!QDBusUtil::isValidObjectPath(path)) + p->lastError = QDBusError(QDBusError::InvalidArgs, + QString(QLatin1String("Object path %1 is invalid")).arg(path)); + else if (!interface.isEmpty() && !QDBusUtil::isValidInterfaceName(interface)) + p->lastError = QDBusError(QDBusError::InvalidArgs, + QString(QLatin1String("Interface %1 is invalid")).arg(interface)); + else + p->lastError = QDBusError(QDBusError::Other, QLatin1String("Unknown error")); + } + } - QString tmp(interface); - QDBusMetaObject *mo = findMetaObject(owner, path, tmp); - if (mo) - return new QDBusInterfacePrivate(QDBusConnection(name), this, owner, path, tmp, mo); - return 0; // error has been set + return p; } QDBusMetaObject * QDBusConnectionPrivate::findMetaObject(const QString &service, const QString &path, - QString &interface) + const QString &interface) { if (!interface.isEmpty()) { QReadLocker locker(&lock); |