summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@nokia.com>2009-11-09 15:10:58 (GMT)
committerThiago Macieira <thiago.macieira@nokia.com>2009-11-09 16:13:03 (GMT)
commit8fbdbd25015a4e5544dace3a77427861f0ca89f4 (patch)
treef123821ab3d89fb3feaee004284613bc31798f08
parentbbdf3d9a600acfcb6df19eb5317fcb79da79c2df (diff)
downloadQt-8fbdbd25015a4e5544dace3a77427861f0ca89f4.zip
Qt-8fbdbd25015a4e5544dace3a77427861f0ca89f4.tar.gz
Qt-8fbdbd25015a4e5544dace3a77427861f0ca89f4.tar.bz2
Let QDBusInterface work even if the introspection failed.
If the introspection failed, we won't have a meta object, meaning you cannot connect to signals or invoke methods via the slot mechanism. But you can still make calls. The isValid() functionality is preserved because there is no owner for this object. Reviewed-By: Harald Fernengel
-rw-r--r--src/dbus/qdbusinterface.cpp6
-rw-r--r--tests/auto/qdbusinterface/tst_qdbusinterface.cpp3
2 files changed, 6 insertions, 3 deletions
diff --git a/src/dbus/qdbusinterface.cpp b/src/dbus/qdbusinterface.cpp
index 74b2a44..d0a693f 100644
--- a/src/dbus/qdbusinterface.cpp
+++ b/src/dbus/qdbusinterface.cpp
@@ -157,7 +157,9 @@ QDBusInterfacePrivate::QDBusInterfacePrivate(const QString &serv, const QString
if (!metaObject) {
// creation failed, somehow
- isValid = false;
+ // most common causes are that the service doesn't exist or doesn't support introspection
+ // those are not fatal errors, so we continue working
+
if (!lastError.isValid())
lastError = QDBusError(QDBusError::InternalError, QLatin1String("Unknown error"));
}
@@ -232,7 +234,7 @@ QDBusInterface::~QDBusInterface()
*/
const QMetaObject *QDBusInterface::metaObject() const
{
- return d_func()->isValid ? d_func()->metaObject : &QDBusAbstractInterface::staticMetaObject;
+ return d_func()->metaObject ? d_func()->metaObject : &QDBusAbstractInterface::staticMetaObject;
}
/*!
diff --git a/tests/auto/qdbusinterface/tst_qdbusinterface.cpp b/tests/auto/qdbusinterface/tst_qdbusinterface.cpp
index 62d6342..bcd5bd9 100644
--- a/tests/auto/qdbusinterface/tst_qdbusinterface.cpp
+++ b/tests/auto/qdbusinterface/tst_qdbusinterface.cpp
@@ -234,6 +234,7 @@ void tst_QDBusInterface::notValid()
void tst_QDBusInterface::invalidAfterServiceOwnerChanged()
{
+ // this test is technically the same as tst_QDBusAbstractInterface::followSignal
QDBusConnection conn = QDBusConnection::sessionBus();
QDBusConnectionInterface *connIface = conn.interface();
@@ -249,7 +250,7 @@ void tst_QDBusInterface::invalidAfterServiceOwnerChanged()
QTestEventLoop::instance().enterLoop(5);
QVERIFY(!QTestEventLoop::instance().timeout());
- QVERIFY(!invalidInterface.isValid());
+ QVERIFY(invalidInterface.isValid());
}
void tst_QDBusInterface::introspect()