[Accessibility-ia2] IA2 review by Will Walker

Pete Brunet 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
e) others?

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 
be removed.

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 
the commentary

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 
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?

Pete Brunet
IBM Accessibility Architecture and Development
11501 Burnet Road, MS 9022E004, Austin, TX 78758
Voice: (512) 838-4594, Cell: (512) 689-4155
Ionosphere: WS4G
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.linux-foundation.org/pipermail/accessibility-ia2/attachments/20080910/7510129e/attachment.htm 

More information about the Accessibility-ia2 mailing list