Why IAccessibile2
The need for the development of this new accessibility API was clear:
1) Crucial features added: the first generation Windows accessibility API, called MSAA or IAccessible, lacked crucial features, such as support for the caret and selection, accessible relations, rich text editing, multiple actions and many other features necessary for quality support in assistive technologies.
2) Accessibility efforts preserved: an evolutionary path was needed for applications which already had MSAA (IAccessible) support, to support these new features. Rather than throw away the MSAA support that applications already had, it was considered less expensive for both applications and assistive technologies to grow new solutions on top of today's code.
3) Harmonized with other platforms: an API was needed that did not require separate accessibility implementations for each platform. The amount of different code between the ATK/AT-SPI implementations for UNIX accessibility, and IAccessible2 implementations, will be minimized, thus saving resources.
What is IAccessible2?
With the new API, an assistive technology will be able to QueryInterface from an IAccessible*, to IAccessible2*, and to any other supported interfaces.
The IAccessible2 interface itself collects important ATK features from other areas, as well some completely new methods and features. These tend to be methods that you may need on any object. For the most part, features were added either to bring Windows capabilities up to the level of ATK/AT-SPI, or in order to support the features of ARIA (previously known of DHTML accessibility). For more information on ARIA, see the links at the end of this email.
There are also specialized interfaces which are used only on objects with the given capabilities of that interface. These interfaces generally have a very close equivalent under ATK. In the following list of interface matchups, ATK interfaces are prefaced with "Atk" and IAccessible2 are prefaced with "IAccessible":
ATK | IAccessible2 |
---|---|
AtkText | IAccessibleText |
AtkEditableText | IAccessibleEditableText |
AtkHyperText | IAccessibleHyperText |
AtkHyperlink | IAccessibleHyperlink |
AtkImage | IAccessibleImage |
AtkTable | IAccessibleTable |
AtkAction | IAccessibleAction |
AtkValue | IAccessibleValue |
AtkRelation | IAccessibleRelation |
That should give a rough idea that what we're doing is expanding MSAA while matching ATK/AT-SPI to a very helpful degree.
For more detail than that, please see the interfaces, available here: http://accessibility.linuxfoundation.org/a11yspecs/ia2/docs/html/