diff options
author | David Faure <david.faure@kdab.com> | 2021-08-21 11:58:30 +0200 |
---|---|---|
committer | David Faure <david.faure@kdab.com> | 2021-08-23 23:07:30 +0200 |
commit | cf34fca4d078acee56781540ac98b34bb790554e (patch) | |
tree | 571875fe9e20ae35587276c489444bb5265999f5 /src/dbus/qdbusxmlgenerator.cpp | |
parent | 7a5f8baa67a66d90f77b3970bb0f92183901c1aa (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.cpp | 17 |
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; |