Accessibility/qt-atspi

From KDE Community Wiki

Qt AT-SPI 2 Bridge

Info

This is about the Qt AT-SPI 2 bridge. The bridge is a Qt Accessibility plugin that exposes the internals of a Qt application to interested accessibility clients such as screenreaders.

AT-SPI on D-Bus at Linuxfoundation

The source code for the bridge can be found here: Qt AT-SPI on gitorious

Tools

With the Gnome efforts to implement AT-SPI 2 we have some really helpful tools:

Accerciser accerciser manual

Orca Orca Debugging

Tutorial on techbase

Python

Testing/Development

You need a very recent environment, most notably: pyatspi2, at-spi2-core and at-spi2-atk

Inside a Gnome session the a11y uses a dedicated d-bus. So if you want to monitor what is going on, you should use: dbus-monitor --address `xprop -root | grep AT_SPI_BUS | sed -e 's/.*= "//' | sed -e 's/"$//'`

Todo

  • Complex widgets with children? Tabs... clicking on a file in qgit (crash fix committed, but still needs proper fix)

GetApplicationBusAddress seems not defined in the xml but is actually called mgorse: That ought to be defined in the xml. It is used to try to set up a direct dbus 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, coordinate with orca devels
  • Test apps with >1 window
  • fix action for menus inside qt
  • scroll bars have 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.
KActiveLabel Unknown
KCharSelect Unknown
KColorButton Unknown
KColorCombo Unknown
KComboBox Unknown
KCModule Unknown
KDateWidget Unknown
KDatePicker Unknown
KDialog Unknown
KDualColorButton Unknown
KEditListBox Unknown
KFontCombo Unknown
KFontChooser Unknown
KFontRequester Unknown
KGradientSelector Unknown
KHistoryCombo Unknown
KHSSelector Unknown
KHtmlView Unknown
KLed Unknown
KListBox Unknown
KListView Unknown
KLineEdit Unknown
KPasswordEdit Unknown
KProgress Unknown
KPushButton Unknown
KKeyButton Unknown
KRestrictedLine Unknown
KIconButton Unknown
KIconView Unknown
KIntSpinBox Unknown
KRuler Unknown
KSqueezedTextLabel Unknown
KTextBrowser Unknown
KTextEdit Unknown
KURLLabel Unknown
KURLComboRequester Unknown
KURLRequester Unknown
KIntNumInput Unknown
KDoubleNumInput Unknown
KDoubleSpinBox Unknown
KTimeWidget 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)