From 5b258d7451ef42634d5f6513f598bee546e1cccb Mon Sep 17 00:00:00 2001 From: Michael Weghorn Date: Mon, 4 Nov 2024 12:44:20 +0100 Subject: [PATCH] a11y atspi: Send AT-SPI signals with correct signature MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The AT-SPI2 XML spec for all signals/events [1] that Qt emits specifies the DBus arguments signature as "siiva{sv}". Qt however was incorrectly sending arguments with an "siiv(so)" signature instead, by sending the QSpiObjectReference as last argument. Fix this by sending the events with the proper signature, using an empty QMap for the properties (that translates to an "a{sv}" type for DBus). [1] https://gitlab.gnome.org/GNOME/at-spi2-core/-/blob/33b45aea12331335eaeb7edb45132466114013e9/xml/Event.xml Fixes: QTBUG-130843 Change-Id: If023763626be3d17b091466b17829d62d29fdede Reviewed-by: Jan Arve Sæther Reviewed-by: Volker Hilsheimer (cherry picked from commit fdf87fdce1c8b926b1c1ee9254aa4b0fc1840d82) Reviewed-by: Qt Cherry-pick Bot --- src/gui/accessible/linux/atspiadaptor.cpp | 5 ++--- src/gui/accessible/linux/atspiadaptor_p.h | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/gui/accessible/linux/atspiadaptor.cpp b/src/gui/accessible/linux/atspiadaptor.cpp index a9194a434fb..f2bcb5967c5 100644 --- a/src/gui/accessible/linux/atspiadaptor.cpp +++ b/src/gui/accessible/linux/atspiadaptor.cpp @@ -890,11 +890,10 @@ void AtSpiAdaptor::windowActivated(QObject* window, bool active) sendDBusSignal(path, ATSPI_DBUS_INTERFACE_EVENT_OBJECT ""_L1, "StateChanged"_L1, stateArgs); } -QVariantList AtSpiAdaptor::packDBusSignalArguments(const QString &type, int data1, int data2, const QVariant &variantData) const +QVariantList AtSpiAdaptor::packDBusSignalArguments(const QString &type, int data1, int data2, const QVariant &variantData) { QVariantList arguments; - arguments << type << data1 << data2 << variantData - << QVariant::fromValue(QSpiObjectReference(m_dbus->connection(), QDBusObjectPath(QSPI_OBJECT_PATH_ROOT))); + arguments << type << data1 << data2 << variantData << QMap(); return arguments; } diff --git a/src/gui/accessible/linux/atspiadaptor_p.h b/src/gui/accessible/linux/atspiadaptor_p.h index fe7f6c477c2..4e5beebf22a 100644 --- a/src/gui/accessible/linux/atspiadaptor_p.h +++ b/src/gui/accessible/linux/atspiadaptor_p.h @@ -56,7 +56,7 @@ private: void setBitFlag(const QString &flag); // sending messages - QVariantList packDBusSignalArguments(const QString &type, int data1, int data2, const QVariant &variantData) const; + static QVariantList packDBusSignalArguments(const QString &type, int data1, int data2, const QVariant &variantData); bool sendDBusSignal(const QString &path, const QString &interface, const QString &name, const QVariantList &arguments) const; QVariant variantForPath(const QString &path) const;