summaryrefslogtreecommitdiffstats
path: root/src/dbus
diff options
context:
space:
mode:
authorKai Uwe Broulik <kde@privat.broulik.de>2023-10-20 17:36:01 +0200
committerKai Uwe Broulik <kde@privat.broulik.de>2023-10-23 21:58:23 +0200
commita668ed44dc98a377a5253410d65fe4b3667e87e6 (patch)
tree36d8546b532e2ad41f07a8a9811c2cea2aab4a55 /src/dbus
parentd7d144b530150c2730bab3c0835b490fe53e57f8 (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>
Diffstat (limited to 'src/dbus')
-rw-r--r--src/dbus/qdbusmisc.cpp14
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