Commit c9c119e
committed
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 c9c119e
2 files changed
Lines changed: 1951 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
224 | 224 | | |
225 | 225 | | |
226 | 226 | | |
| 227 | + | |
227 | 228 | | |
228 | 229 | | |
229 | 230 | | |
| |||
0 commit comments