From bd1cb1547fb6311ac3b8bb358d6eeef56d2d16f9 Mon Sep 17 00:00:00 2001 From: Michael Weghorn Date: Mon, 20 Jan 2025 13:17:00 +0100 Subject: [PATCH] a11y atspi: Report app parent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit While the application's a11y object doesn't have a parent within Qt's a11y hierarchy, the AT-SPI registry/desktop is the parent of all application objects. Therefore, report that one instead of using a null path. With that in place, querying the application parent via Accerciser's IPython console now gives the expected result: In [16]: acc.role Out[16]: In [17]: acc.parent Out[17]: In [18]: acc.parent.role Out[18]: While at it, also add a "m_" prefix for the AtspiAdaptor::accessibilityRegistry member. Fixes: QTBUG-132935 Change-Id: I0e174f73c837b233fe4d5788d1c375b404000025 Reviewed-by: Jan Arve Sæther (cherry picked from commit befce757faa0b0abd2c1f4ec408c1a0932794b0c) Reviewed-by: Qt Cherry-pick Bot --- src/gui/accessible/linux/atspiadaptor.cpp | 8 +++++++- src/gui/accessible/linux/atspiadaptor_p.h | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gui/accessible/linux/atspiadaptor.cpp b/src/gui/accessible/linux/atspiadaptor.cpp index 51df6727264..4f863c34cd9 100644 --- a/src/gui/accessible/linux/atspiadaptor.cpp +++ b/src/gui/accessible/linux/atspiadaptor.cpp @@ -1546,7 +1546,7 @@ void AtSpiAdaptor::registerApplication() reply.waitForFinished(); // TODO: make this async if (reply.isValid ()) { const QSpiObjectReference &socket = reply.value(); - accessibilityRegistry = QSpiObjectReference(socket); + m_accessibilityRegistry = QSpiObjectReference(socket); } else { qCWarning(lcAccessibilityAtspi) << "Error in contacting registry:" << reply.error().name() @@ -1582,6 +1582,12 @@ bool AtSpiAdaptor::accessibleInterface(QAccessibleInterface *interface, const QS QString path; QAccessibleInterface * parent = interface->parent(); if (!parent) { + if (interface->object() == qApp) { + sendReply(connection, message, + QVariant::fromValue(QDBusVariant(QVariant::fromValue(m_accessibilityRegistry)))); + return true; + } + path = ATSPI_DBUS_PATH_NULL ""_L1; } else if (parent->role() == QAccessible::Application) { path = ATSPI_DBUS_PATH_ROOT ""_L1; diff --git a/src/gui/accessible/linux/atspiadaptor_p.h b/src/gui/accessible/linux/atspiadaptor_p.h index 4e5beebf22a..a620672f72a 100644 --- a/src/gui/accessible/linux/atspiadaptor_p.h +++ b/src/gui/accessible/linux/atspiadaptor_p.h @@ -113,7 +113,7 @@ private: static bool inheritsQAction(QObject *object); // private vars - QSpiObjectReference accessibilityRegistry; + QSpiObjectReference m_accessibilityRegistry; QAtSpiDBusConnection *m_dbus; QSpiApplicationAdaptor *m_applicationAdaptor;