diff options
Diffstat (limited to 'src/dbus')
-rw-r--r-- | src/dbus/doc/qtdbus.qdocconf | 5 | ||||
-rw-r--r-- | src/dbus/doc/src/qtdbus-module.qdoc | 1 | ||||
-rw-r--r-- | src/dbus/qdbusabstractadaptor.cpp | 11 | ||||
-rw-r--r-- | src/dbus/qdbusconnection_p.h | 4 | ||||
-rw-r--r-- | src/dbus/qdbusintegrator.cpp | 6 | ||||
-rw-r--r-- | src/dbus/qdbusmisc.cpp | 22 | ||||
-rw-r--r-- | src/dbus/qdbusxmlgenerator.cpp | 16 |
7 files changed, 40 insertions, 25 deletions
diff --git a/src/dbus/doc/qtdbus.qdocconf b/src/dbus/doc/qtdbus.qdocconf index b47e02ff43..1233ae3d47 100644 --- a/src/dbus/doc/qtdbus.qdocconf +++ b/src/dbus/doc/qtdbus.qdocconf @@ -20,7 +20,7 @@ excludedirs += ../../../examples/widgets/doc examplesinstallpath = dbus -depends += qtcore +depends += qtdoc qtcore # The following parameters are for creating a qhp file, the qhelpgenerator # program can convert the qhp file into a qch file which can be opened in @@ -49,3 +49,6 @@ qhp.QtDBus.subprojects.classes.title = C++ Classes qhp.QtDBus.subprojects.classes.indexTitle = Qt D-Bus C++ Classes qhp.QtDBus.subprojects.classes.selectors = class fake:headerfile qhp.QtDBus.subprojects.classes.sortPages = true + +navigation.landingpage = "Qt D-Bus" +navigation.cppclassespage = "Qt D-Bus C++ Classes" diff --git a/src/dbus/doc/src/qtdbus-module.qdoc b/src/dbus/doc/src/qtdbus-module.qdoc index fe3b11b926..ac9cac428b 100644 --- a/src/dbus/doc/src/qtdbus-module.qdoc +++ b/src/dbus/doc/src/qtdbus-module.qdoc @@ -32,6 +32,7 @@ to perform Inter-Process Communication using the \l{D-Bus} protocol. \ingroup modules + \qtvariable dbus \target The QDBus compiler diff --git a/src/dbus/qdbusabstractadaptor.cpp b/src/dbus/qdbusabstractadaptor.cpp index 02ff40068b..04accee037 100644 --- a/src/dbus/qdbusabstractadaptor.cpp +++ b/src/dbus/qdbusabstractadaptor.cpp @@ -307,15 +307,18 @@ void QDBusAdaptorConnector::relay(QObject *senderObj, int lastSignalIdx, void ** // break down the parameter list QVector<int> types; - int inputCount = qDBusParametersForMethod(mm, types); - if (inputCount == -1) + QString errorMsg; + int inputCount = qDBusParametersForMethod(mm, types, errorMsg); + if (inputCount == -1) { // invalid signal signature - // qDBusParametersForMethod has already complained + qWarning("QDBusAbstractAdaptor: Cannot relay signal %s::%s: %s", + senderMetaObject->className(), mm.methodSignature().constData(), + qPrintable(errorMsg)); return; + } if (inputCount + 1 != types.count() || types.at(inputCount) == QDBusMetaTypeId::message()) { // invalid signal signature - // qDBusParametersForMethod has not yet complained about this one qWarning("QDBusAbstractAdaptor: Cannot relay signal %s::%s", senderMetaObject->className(), mm.methodSignature().constData()); return; diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h index c702de141a..013896bd32 100644 --- a/src/dbus/qdbusconnection_p.h +++ b/src/dbus/qdbusconnection_p.h @@ -341,9 +341,9 @@ public: }; // in qdbusmisc.cpp -extern int qDBusParametersForMethod(const QMetaMethod &mm, QVector<int> &metaTypes); +extern int qDBusParametersForMethod(const QMetaMethod &mm, QVector<int> &metaTypes, QString &errorMsg); #endif // QT_BOOTSTRAPPED -extern Q_DBUS_EXPORT int qDBusParametersForMethod(const QList<QByteArray> ¶meters, QVector<int>& metaTypes); +extern Q_DBUS_EXPORT int qDBusParametersForMethod(const QList<QByteArray> ¶meters, QVector<int>& metaTypes, QString &errorMsg); extern Q_DBUS_EXPORT bool qDBusCheckAsyncTag(const char *tag); #ifndef QT_BOOTSTRAPPED extern bool qDBusInterfaceInObject(QObject *obj, const QString &interface_name); diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp index 3f25f02bee..e5f3fbdc53 100644 --- a/src/dbus/qdbusintegrator.cpp +++ b/src/dbus/qdbusintegrator.cpp @@ -721,7 +721,8 @@ static int findSlot(const QMetaObject *mo, const QByteArray &name, int flags, if (isAsync && returnType != QMetaType::Void) continue; - int inputCount = qDBusParametersForMethod(mm, metaTypes); + QString errorMsg; + int inputCount = qDBusParametersForMethod(mm, metaTypes, errorMsg); if (inputCount == -1) continue; // problem parsing @@ -1312,7 +1313,8 @@ int QDBusConnectionPrivate::findSlot(QObject* obj, const QByteArray &normalizedN if (midx == -1) return -1; - int inputCount = qDBusParametersForMethod(obj->metaObject()->method(midx), params); + QString errorMsg; + int inputCount = qDBusParametersForMethod(obj->metaObject()->method(midx), params, errorMsg); if ( inputCount == -1 || inputCount + 1 != params.count() ) return -1; // failed to parse or invalid arguments or output arguments diff --git a/src/dbus/qdbusmisc.cpp b/src/dbus/qdbusmisc.cpp index d28d5598c6..5d3512845a 100644 --- a/src/dbus/qdbusmisc.cpp +++ b/src/dbus/qdbusmisc.cpp @@ -131,14 +131,14 @@ bool qDBusInterfaceInObject(QObject *obj, const QString &interface_name) // metaTypes.count() >= retval + 1 in all cases // // sig must be the normalised signature for the method -int qDBusParametersForMethod(const QMetaMethod &mm, QVector<int> &metaTypes) +int qDBusParametersForMethod(const QMetaMethod &mm, QVector<int> &metaTypes, QString &errorMsg) { - return qDBusParametersForMethod(mm.parameterTypes(), metaTypes); + return qDBusParametersForMethod(mm.parameterTypes(), metaTypes, errorMsg); } #endif // QT_BOOTSTRAPPED -int qDBusParametersForMethod(const QList<QByteArray> ¶meterTypes, QVector<int>& metaTypes) +int qDBusParametersForMethod(const QList<QByteArray> ¶meterTypes, QVector<int>& metaTypes, QString &errorMsg) { QDBusMetaTypeId::init(); metaTypes.clear(); @@ -151,8 +151,7 @@ int qDBusParametersForMethod(const QList<QByteArray> ¶meterTypes, QVector<in for ( ; it != end; ++it) { const QByteArray &type = *it; if (type.endsWith('*')) { - //qWarning("Could not parse the method '%s'", mm.methodSignature().constData()); - // pointer? + errorMsg = QLatin1String("Pointers are not supported: ") + QLatin1String(type); return -1; } @@ -162,8 +161,7 @@ int qDBusParametersForMethod(const QList<QByteArray> ¶meterTypes, QVector<in int id = QMetaType::type(basictype); if (id == 0) { - //qWarning("Could not parse the method '%s'", mm.methodSignature().constData()); - // invalid type in method parameter list + errorMsg = QLatin1String("Unregistered output type in parameter list: ") + QLatin1String(type); return -1; } else if (QDBusMetaType::typeToSignature(id) == 0) return -1; @@ -174,22 +172,22 @@ int qDBusParametersForMethod(const QList<QByteArray> ¶meterTypes, QVector<in } if (seenMessage) { // && !type.endsWith('&') - //qWarning("Could not parse the method '%s'", mm.methodSignature().constData()); - // non-output parameters after message or after output params + errorMsg = QLatin1String("Invalid method, non-output parameters after message or after output parameters: ") + QLatin1String(type); return -1; // not allowed } int id = QMetaType::type(type); if (id == QMetaType::UnknownType) { - //qWarning("Could not parse the method '%s'", mm.methodSignature().constData()); - // invalid type in method parameter list + errorMsg = QLatin1String("Unregistered input type in parameter list: ") + QLatin1String(type); return -1; } if (id == QDBusMetaTypeId::message()) seenMessage = true; - else if (QDBusMetaType::typeToSignature(id) == 0) + else if (QDBusMetaType::typeToSignature(id) == 0) { + errorMsg = QLatin1String("Type not registered with QtDBus in parameter list: ") + QLatin1String(type); return -1; + } metaTypes.append(id); ++inputCount; diff --git a/src/dbus/qdbusxmlgenerator.cpp b/src/dbus/qdbusxmlgenerator.cpp index 8c822162e4..c724ac573a 100644 --- a/src/dbus/qdbusxmlgenerator.cpp +++ b/src/dbus/qdbusxmlgenerator.cpp @@ -41,6 +41,7 @@ #include <QtCore/qmetaobject.h> #include <QtCore/qstringlist.h> +#include <QtCore/qdebug.h> #include "qdbusinterface_p.h" // for ANNOTATION_NO_WAIT #include "qdbusabstractadaptor_p.h" // for QCLASSINFO_DBUS_* @@ -159,17 +160,24 @@ static QString generateInterfaceXml(const QMetaObject *mo, int flags, int method if (QDBusMetaType::signatureToType(typeName) == QVariant::Invalid) xml += QString::fromLatin1(" <annotation name=\"org.qtproject.QtDBus.QtTypeName.Out0\" value=\"%1\"/>\n") .arg(typeNameToXml(QMetaType::typeName(typeId))); - } else + } else { + qWarning() << "Unsupported return type" << typeId << QMetaType::typeName(typeId) << "in method" << mm.name(); continue; + } } - else if (typeId == QMetaType::UnknownType) + else if (typeId == QMetaType::UnknownType) { + qWarning() << "Invalid return type in method" << mm.name(); continue; // wasn't a valid type + } QList<QByteArray> names = mm.parameterNames(); QVector<int> types; - int inputCount = qDBusParametersForMethod(mm, types); - if (inputCount == -1) + QString errorMsg; + int inputCount = qDBusParametersForMethod(mm, types, errorMsg); + if (inputCount == -1) { + qWarning() << "Skipped method" << mm.name() << ":" << qPrintable(errorMsg); continue; // invalid form + } if (isSignal && inputCount + 1 != types.count()) continue; // signal with output arguments? if (isSignal && types.at(inputCount) == QDBusMetaTypeId::message()) |