summaryrefslogtreecommitdiffstats
path: root/src/dbus/qdbusxmlgenerator.cpp
diff options
context:
space:
mode:
authorDavid Faure <david.faure@kdab.com>2021-08-21 11:58:30 +0200
committerDavid Faure <david.faure@kdab.com>2021-08-23 23:07:30 +0200
commitcf34fca4d078acee56781540ac98b34bb790554e (patch)
tree571875fe9e20ae35587276c489444bb5265999f5 /src/dbus/qdbusxmlgenerator.cpp
parent7a5f8baa67a66d90f77b3970bb0f92183901c1aa (diff)
QDBus: fix ExportScriptableInvokables to allow calling scriptable invokables
The "wantedMask" check in the xml generator didn't distinguish slots from invokables, so exporting an object with just ExportScriptableInvokables didn't allow calling Q_SCRIPTABLE methods. Change-Id: I7b408755da5b28e67a9384d9df95e22dc5de2369 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/dbus/qdbusxmlgenerator.cpp')
-rw-r--r--src/dbus/qdbusxmlgenerator.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/dbus/qdbusxmlgenerator.cpp b/src/dbus/qdbusxmlgenerator.cpp
index 35ca4b0b2d..e00a03360c 100644
--- a/src/dbus/qdbusxmlgenerator.cpp
+++ b/src/dbus/qdbusxmlgenerator.cpp
@@ -127,14 +127,17 @@ static QString generateInterfaceXml(const QMetaObject *mo, int flags, int method
for (int i = methodOffset; i < mo->methodCount(); ++i) {
QMetaMethod mm = mo->method(i);
- bool isSignal;
+ bool isSignal = false;
+ bool isSlot = false;
if (mm.methodType() == QMetaMethod::Signal)
// adding a signal
isSignal = true;
- else if (mm.access() == QMetaMethod::Public && (mm.methodType() == QMetaMethod::Slot || mm.methodType() == QMetaMethod::Method))
- isSignal = false;
+ else if (mm.access() == QMetaMethod::Public && mm.methodType() == QMetaMethod::Slot)
+ isSlot = true;
+ else if (mm.access() == QMetaMethod::Public && mm.methodType() == QMetaMethod::Method)
+ ; // invokable, neither signal nor slot
else
- continue; // neither signal nor public slot
+ continue; // neither signal nor public method/slot
if (isSignal && !(flags & (QDBusConnection::ExportScriptableSignals |
QDBusConnection::ExportNonScriptableSignals)))
@@ -220,10 +223,12 @@ static QString generateInterfaceXml(const QMetaObject *mo, int flags, int method
int wantedMask;
if (isScriptable)
wantedMask = isSignal ? QDBusConnection::ExportScriptableSignals
- : QDBusConnection::ExportScriptableSlots;
+ : isSlot ? QDBusConnection::ExportScriptableSlots
+ : QDBusConnection::ExportScriptableInvokables;
else
wantedMask = isSignal ? QDBusConnection::ExportNonScriptableSignals
- : QDBusConnection::ExportNonScriptableSlots;
+ : isSlot ? QDBusConnection::ExportNonScriptableSlots
+ : QDBusConnection::ExportNonScriptableInvokables;
if ((flags & wantedMask) != wantedMask)
continue;