Pete Brunet, Andres Gonzalez, Cathy Laws, Larry Weiss, Sueann Nichols, Janina Sajka, Aaron Leventhal, Mike Squillace, Michael Stewart
Open A11y News
Earlier George and Janina met with Jim Zemlin to discuss branding of Open A11y. There will be a further meeting at the F2F at Google, June 13-15 in Mountain View
The group accepted the following text:
This data is only guaranteed to be valid while the thread notifying the event continues. Once the handler has returned, the validity of the data depends on how the server manages the life cycle of its objects. Also, note that the server may have different life cycle management strategies for controls depending on whether or not a control manages its children. Lists, trees, and tables can have a large number of children and thus it's possible that the child objects for those controls would only be created as needed. Servers should document their life cycle strategy as this will be of interest to ATs or script engines accessing data out of process or from other threads. Servers only need to save the last inserted or removed block of text and a scope of the entire application is adequate.
The group accepted the following behavior:
The AT should be able to get all text by specifying -1 on the endOffset.
Today Notes 8 returns an error. The code will be change to return all in Notes 8.0.1.
endOffset < startOffset should return an E_FAIL.
Today Notes 8 does not return an error. The code will be change to return and error in Notes 8.0.1.
endoffset > actual end should return an E_FAIL.
Structuring of tables - Do cells have to be immediate children of the table?
There is a concern that IATable has a limitation of children being cells. Andres requested support for other structures such as the case where the children are rows which in turn have cells as children. There is production code relying on the current IDL. However the IDL should provide for the requested use case.
Larry: Compatibility with Linux is important
Andres: We should change linux too
Janina: Need to invite the Linux team into the discussion if we want to change ATK: Bill Haneman, George Kraft, Peter Korn
Larry: The accessible hierarchy needs to be traversable and it uses hierarchy; tooling and ATs need navigation to be simple and not use the table interface. There needs to be a way to get between parent/child.
Andres: Our tables are quite complex.
Larry: Need cells as decendants.
Andres: I agree.
Larry: Accessible table will also implement IAccessible.
Andres: Yes but children of table should have the option of being rows.
Larry: How to get from active decendant changed event to the table?
Andres: You Probably don't need the active decendant changed event.
Larry: It's actually most important for tables.
Andres: You need to send the cell pointer with the event. (Pete: MSAA events can't pass data.)
Larry: In the current usage, the table is the source of the event.
Larry: The source of event is a table (or row), not the cell that is active. How to get to the cell?
Andres: I need to followup via email.
Larry: I agree that there is merit. We might be able to fix this on Linux (because event data can be passed), but maybe not on Windows because event data can't be passed.
Aaron: In FF we just fire focus events
Larry: You never mark a table as managing decendants?
Aaron: ARIA has support for an active decendant property and an ID that points to an active decendant. But then fire focus.
Aaron: An AT should treat the active decendant changed event the same as focus.
Post meeting editorial comments from Pete:
In Andres' scenario tables are managing rows which manage cells. If a cell changes the event would be from the row. MSAA has a ROW role. The AT could sense that a ROW fired the event and could then go up one level to get to the table.
There is an oversight in the IDL. There is no means to indicate which child changed when IA2_EVENT_ACTIVE_DECENDENT_CHANGED is fired. We need to add IAccessible2::changedDecendant.
I couldn't find information on ARIA's handling of managed decendants.
Deprecation of IA2_EVENT_TEXT_UPDATED
IA2_EVENT_TEXT_UPDATED is redundant with IA2_EVENT_TEXT_CHANGED. It will be documenting that IA2_EVENT_TEXT_UPDATED is deprecated and should not be used.
AT-SPI uses a double for the parameters. IA2 uses a VARIANT. ARIA allows for values to be from sets of strings like "low", "medium", "high". The current IDL gives access to these strings. Is there an issue with the difference with Linux?
Aaron: ARIA values aren't types. Bill Haneman would argue it should support the selection interface.
Larry: You've only got one accessible and selection implies child objects. ATK has an issue due to just supporting numeric values.
Aaron: Could expose value as an object attribute.
Larry: The value could be converted to a number and the accessible name could be: "low", "medim", "high".
Aaron: ATs don't listen to name changes. I would be happy with double for now and fix it later.
Andres: VARIANT is OK.
Larry: This is OK for IA2 but ATK is broken.
There is a related issue of how the AT would discover the set of strings (choices) if the AT needed to present them to the user. They could be passed to the AT via IAccessible2::attributes, or via a new IAValue2 method. However, IAAction is provided for fetching strings related to a set of choices and for activating these choices. Is this an acceptable solution?
Larry and Andres like the action interface.
Aaron: That will probably work.
The current design is a performance problem for Firefox. HTML has label for but not label by. FF would like to provide labeled by. In order to do this it has to search the DOM for text which could label a control. This would be a waste of time if the AT is not looking for a labeled by relation. Aaron is requesting that IA2::relation be changed to take an integer defining one of the existing relations. IA2 relations are defined as strings so a matching enumerator would also be needed.
Some problems are:
ATK has the same problem.
Any dynamically defined relations would not have a related integer and would not be accessible via IA2::relation.
Aaron and Sina have discussed means to make the creation of the labeled by relation faster
using a hash/cache
looking nearby instead of through the entire DOM.
Aaron: We can do hash/cache in FF but inverse relations are still expensive. I want a getter for a single relation.
Andres: We could keep the old methods, but we should add the new one.