[Accessibility-ia2] IA2 review by Will Walker
brunet at us.ibm.com
Wed Sep 10 14:06:40 PDT 2008
Will Walker reviewed the IA2 spec and shared his observations with me late
Tuesday. Following are the issues Will raised. He considered the first
two high priority. Please review and provide your feedback, either via
email (preferrably to the list) or by attending the next IA2 meeting next
Tuesday at 3 PM CDT.
1) ATK has role sets, i.e. objects can have more than one role. GTK
tables can have children which are checkboxes rather than plain cells.
It's not the case that the checkbox is a child of the cell. The only way
the AT can know the checkbox is also a cell is if it has two roles.
Some ways to solve this while maintaining compatibility
a) Add a new state, "is cell"
b) Use IA2::extendedRole for the cell plus IA2::role for the checkbox
c) Require the app to create an accessible hierarchy that places the
checkbox in a cell
d) Add role sets to the next version of IA2
2) The toolkit name and version should be moved from IAApplication to
IAccessible2. Apps can be made up of objects from different toolkits,
e.g. chrome vs presentation area.
We can add those two methods to IAccessible2 and deprecate them from
IAApplication. Is anyone currently using these properties?
3) It would be better if roles were just strings. String compares are
fast enough. Then IA2::extendedRole and IA2::localizedExtendedRole could
This would have to be done in a later version as implementations of the
current IDL are already in production.
4) The format of IAAction::keyBinding should be described.
It's a user consumable and localized string. This should be mentioned in
5) The labelledBy relation is coded as follows:
const WCHAR *const IA2_RELATION_LABELED_BY = L"labelledBy"
Note the mismatch of single L and double L. This could be fixed by adding
the double L version to the current single L version.
const WCHAR *const IA2_RELATION_LABELLED_BY = L"labelledBy"
6) There is no tooltipFor relation.
Should this be added? Although it's in ATK it's not used.
7) If an object such as a table has IA2_MANAGES_DESCENDANTS and , how does
an AT determine which child is active in a table? AT-SPI fires
active-descendant-changed which includes the child index of the newly
active child object.
This capability is incomplete in IA2. Although IA2 has the
IA2_MANAGES_DESCENDANTS state and the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED
event, there is no means to fetch an object's currently active child. This
is data passed with the event in AT-SPI but WinEvents does not have the
means to pass this kind of event specific data. This is been worked
around for other events by adding properties that can be fetched on the
event thread but the addition of a current active descendant property was
overlooked during the IA2 design. In the current IA2 implementations the
AT vendors requested that rather than the managing object firing the
IA2_EVENT_ACTIVE_DECENDENT_CHANGED event they preferred that the active
child object fire MSAA's EVENT_OBJECT_FOCUS instead. This is a better
situation for NVDA which is out of process and has no means to
synchronously access an active descendant property.
In the case of Symphony which maps UAAPI (an ATK/AT-SPI like environment)
to IA2, the active descendant changed event is mapped to a focus event.
At this point, it's probably best to document that IA2_MANAGES_DESCENDANTS
state and the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED event are deprecated and
the later should be replaced with a focus event fired on the active child
BTW, I also noted that the commentary for the IA2_MANAGES_DESCENDANTS
state is wrong. It talks about how it's provided as a signal to an AT so
it knows it doesn't have to add listeners to the children. This is a
carry over from the OpenOffice documentation used as a basis for the IA2
IDL. Windows has a single event queue rather than requiring registration
of events on a per object basis. It also mentions that the parent object
provides state notifications regarding the state of its children. As
mentioned above In IA2 implementations the notifications come from the
children. This commentary needs to be fixed in the IDL.
8) IAccessibleValue::minimumValue - the commentary says: ...If this
object has no upper bound. It should be "lower bound".
I will fix this.
9) IAValue should include methods to fetch the user consumable current,
minimum, and maximum values, e.g. a slider may visually indicate three
values (small, medium, large) but the programmatic values could be (1, 2,
3). The AT should be able to fetch the values as seen by the user.
ATK also doesn't have this feature, but it seems like a good one. What
are your thoughts?
IBM Accessibility Architecture and Development
11501 Burnet Road, MS 9022E004, Austin, TX 78758
Voice: (512) 838-4594, Cell: (512) 689-4155
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Accessibility-ia2