Skip to content

Commit 8e85ab7

Browse files
Add a Linux accessibility backend (AT-SPI 2)
juce_gui_basics has no accessibility implementation on Linux: the generic juce_Accessibility.cpp compiles an empty stub, so the AccessibilityHandler tree that JUCE already maintains is invisible to assistive technologies and UI automation tools. This adds a native backend that exposes that tree as AT-SPI 2 objects over D-Bus (direct D-Bus, as Qt does; not ATK). - No new dependencies: libdbus is loaded with dlopen and its (ABI-stable) types are declared locally, matching how juce_gui_basics treats its other optional Linux libraries. - All bus traffic is handled on the message thread: the bus socket fd is added to the event loop via LinuxEventLoop::registerFdCallback, so the connection is pumped on read-readiness with no polling, no extra thread and no locking. - One fallback object serves the whole /org/a11y/atspi subtree. Implemented interfaces: Accessible, Component, Application, Action, Value, Selection, Table, TableCell, Text, EditableText, Cache, the freedesktop Properties and Introspectable interfaces, plus AT-SPI event signals (state/children/bounds/ text/value changes, focus and window events). - Component.GetAccessibleAtPoint hit-testing (via AccessibilityHandler:: getChildAt), canonical role names from GetRoleName, the Selection interface derived from the children's selected/selectable states (mirroring the UIA SelectionProvider), and postAnnouncement emitting the AT-SPI live-region Announcement signal (at-spi2-core >= 2.46). Tested on Ubuntu 24.04 (at-spi2-core 2.52) with busctl and a libatspi client driving a running application: tree walking with roles/names/states/bounds, coordinate-free invocation via Action.DoAction, hit-testing, value get/set, and Cache.GetItems.
1 parent 6770b97 commit 8e85ab7

2 files changed

Lines changed: 2026 additions & 0 deletions

File tree

modules/juce_gui_basics/juce_gui_basics.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@
224224
#include "native/juce_FileChooser_windows.cpp"
225225

226226
#elif JUCE_LINUX || JUCE_BSD
227+
#include "native/accessibility/juce_Accessibility_linux.cpp"
227228
#include "native/juce_XSymbols_linux.cpp"
228229
#include "native/juce_DragAndDrop_linux.cpp"
229230

0 commit comments

Comments
 (0)