diff options
author | Kai Uwe Broulik <kde@privat.broulik.de> | 2023-10-20 17:36:01 +0200 |
---|---|---|
committer | Kai Uwe Broulik <kde@privat.broulik.de> | 2023-10-23 21:58:23 +0200 |
commit | a668ed44dc98a377a5253410d65fe4b3667e87e6 (patch) | |
tree | 36d8546b532e2ad41f07a8a9811c2cea2aab4a55 | |
parent | d7d144b530150c2730bab3c0835b490fe53e57f8 (diff) |
QtDBus: Use explicitly meta type name instead of method type
In Qt 6, QMetaType sees the underlying type the compiler knows,
so a "using VariantMapMap = QMap<QString, QVariantMap>" typedef
will fail to match a signature of VariantMapMap to QMap<...>
because qDBusParametersForMethod looks for the method type name
whose QMetaType::fromName lookup will fail later.
Pick-to: 6.6 6.5
Change-Id: I142dc42ca86aa8a96f73424ec5da5780f2c1e6a3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r-- | src/dbus/qdbusmisc.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/dbus/qdbusmisc.cpp b/src/dbus/qdbusmisc.cpp index 5a9d8f548f..635258c86d 100644 --- a/src/dbus/qdbusmisc.cpp +++ b/src/dbus/qdbusmisc.cpp @@ -123,7 +123,19 @@ bool qDBusInterfaceInObject(QObject *obj, const QString &interface_name) // sig must be the normalised signature for the method int qDBusParametersForMethod(const QMetaMethod &mm, QList<QMetaType> &metaTypes, QString &errorMsg) { - return qDBusParametersForMethod(mm.parameterTypes(), metaTypes, errorMsg); + QList<QByteArray> parameterTypes; + parameterTypes.reserve(mm.parameterCount()); + + // Not using QMetaMethod::parameterTypes() since we call QMetaType::fromName below + // where we need any typedefs resolved already. + for (int i = 0; i < mm.parameterCount(); ++i) { + QByteArray typeName = mm.parameterMetaType(i).name(); + if (typeName.isEmpty()) + typeName = mm.parameterTypeName(i); + parameterTypes.append(typeName); + } + + return qDBusParametersForMethod(parameterTypes, metaTypes, errorMsg); } #endif // QT_BOOTSTRAPPED |