Accessibility/qt-atspi

From KDE Community Wiki

Note

This page has old content. See page history.

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:

illustration of the numeronym a11y, where eleven refers to the number of letters omitted

Testing/Development

Development of these components requires a very recent environment, most notably to include:

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

KDE Widgets
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.

  1. We can only (safely?) hold on to interfaces created by navigate or queryInterface.
  2. 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

  1. Formerly accessible at git://gitorious.org/qt-at-spi.git.

External links