Accessibility/qt-atspi
Qt AT-SPI 2 Bridge
The Qt AT-SPI 2 bridge (Assistive Technology Service Provider Interface) is a Qt Accessibility plugin that exposes the internals of a Qt application to accessibility clients such as screen readers.
Source code
The source code for the bridge is archived on KDE Invent following the closure of the original Gitorious repository[1] by the Qt developers in 2016.
Tools
Thanks to the efforts of the GNOME Project to implement their AT-SPI 2 implementation (named ATK, the Accessibility ToolKit), we have some really helpful tools for further development in this area:
- Accerciser, an interactive accessibility explorer written in Python.
- Orca, an extensible screen reader that converts textual content into speech and/or braille.
- "Python-powered" Accessibility code example.

Testing/Development
Development of these components requires a very recent environment, most notably to include:
- at-spi2-core,
- at-spi2-atk, and
- pyatspi2
Inside a GNOME session, the accessibility software and other assistive technology (often referred to by the numeronym a11y) use a dedicated D-Bus, so if you want to monitor what is going on you should use a tool like dbus-monitor:
dbus-monitor --address $(xprop -root | grep AT_SPI_BUS | sed -e 's/.*= "//' -e 's/"$//')
To do
Complex widgets with children? Tabs … clicking on a file in qgit … (crash fix committed, but still needs proper fix)
GetApplicationBusAddress
seems to be undefined in the XML, but is actually called
mgorse[sic, ??], that ought to be defined somewhere. It is used to try to set up a direct D-Bus connection between libatspi and the application. libatspi will revert to using the session bus if it returns an empty string or an error.
Don't pretend to be gail, instead coordinate with the Orca developers
Test apps with multiple windows
Fix action for menus inside Qt
Scroll bars have a value interface, but don't update and cannot be updated, value interface in general…
Text attributes (bold, etc.)
Tabs
Widgets
- Combobox
- List
- Tree
- Table
- Spinner
- Scrollbar
Widget | Status |
---|---|
ExampleWidget1 | Ready. |
ExampleWidget2 | Mostly done, still needs fooBar() call. |
KCharSelect | Unknown |
KColorButton | Unknown |
KColorCombo | Unknown |
KComboBox | Unknown |
KCModule | Unknown |
KDateWidget | Unknown |
KDatePicker | Unknown |
KDialog | Unknown |
KEditListBox | Unknown |
KFontComboBox | Unknown |
KFontChooser | Unknown |
KFontRequester | Unknown |
KGradientSelector | Unknown |
KHistoryComboBox | Unknown |
KHueSaturationSelector | Unknown |
KHtmlView | Unknown |
KLed | Unknown |
KListWidget | Unknown |
KLineEdit | Unknown |
KPushButton | Unknown |
KRestrictedLine | Unknown |
KIntSpinBox | Unknown |
KRuler | Unknown |
KSqueezedTextLabel | Unknown |
KTextBrowser | Unknown |
KTextEdit | Unknown |
KURLLabel | Unknown |
KURLComboRequester | Unknown |
KURLRequester | Unknown |
KIntNumInput | Unknown |
KDoubleNumInput | Unknown |
KDateTimeWidget | Unknown |
KDateTable | Unknown |
Memory Management
Qt's current QAccessibleInterface is a pain to deal with.
- We can only (safely?) hold on to interfaces created by navigate or queryInterface.
- Interfaces that we get through notifyAccessibility are deleted by Qt behind our back, so we need to never keep those around (Frederik will try to fix that now).
References
- ↑ Formerly accessible at
git://gitorious.org/qt-at-spi.git
.
External links
- KDE Accessibility tutorial on Techbase
- AT-SPI2 on Freedesktop.org Wiki
- Linux Foundation's ATK/AT-SPI Special Interest Group
- AT-SPI on D-Bus (last updated on June 1, 2011)