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. And compatibility with Linux is important. However the IDL should provide for the requested use case.
The accessible hierarchy needs to be traversable through MSAA's methods. There needs to be a natural hierarchy from table at the top and cells (or cell contents) at the bottom. The request is that rows could be intermediate accessible objects.
One concern is for the common case of a table which manages its children. One design is for the table to fire an "active decendant changed" event. Then the AT would need an IATable method to fetch the accessible of the changed child. IA2 does not have such a getter at this time. Another design is for the "transient" cell (or its contents, e.g. a PARAGRAPH) to fire a focus event. This is what is done in Firefox. Also, the Lotus Word Processor maps the UNO active decendant changed event fired by a table to a focus event fired on the cell (or its contents). If the AT needs to get to the table it can traverse up the tree past any intermediate ROW objects to the table.
If cells are not direct decendants of tables should the following three methods return DISP_E_MEMBERNOTFOUND?
HRESULT childIndex ([in] long rowIndex,[in] long columnIndex,[out, retval] long *childIndex)
HRESULT columnIndex ([in] long childIndex,[out, retval] long *columnIndex)
HRESULT rowIndex ([in] long childIndex,[out, retval] long *rowIndex)
What are the remaining issues that need to be discussed and resolved?
IAValue - Issue raised by Aaron
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 IA2 IDL gives access to these strings. During the last meeting there were no objections to the current IDL but it was felt that ATK / AT-SPI needs to be enhanced. There is a related issue of how the AT would discover the set of strings (choices) so the AT can present them to the user. It was felt that IAAction is the proper means for a server to expose choices to a client. The AT can get the choices via IAAction and set a choice either via IAAction::doAction or IAValue::setCurrentValue.
Is this acceptable?
IA2::relation/relations - Issue raised by Aaron.
It was agreed at the last meeting that we need to add a method to IAccessible2 to fetch a single IARelation. The issues to be worked out are:
What should the [in] parameter be? An integer would limit it to pre-defined relations. A BSTR would be more flexible. Are there any issues with using a BSTR?
The interface needs to be rev'd, i.e. renamed to IAccessilbe2_2 and using new GUIDs. JAWS and Window-Eyes will have to be updated to use the new interface while continuing to use the original IAccessible2 interface if detected. Are there any issues related to this?
ATK / AT-SPI should be modifed in a similar fashion.
Michael Stewart has finished his intern assignment at IBM. He finished the Python wrappers around IA2 and MSAA. Waiting for IBM legal approval to release as BSD.
Inspect tool - Mike Squillace
Eclipse - Barry Feigenbaum
Firefox - Aaron Leventhal
Documentation of memory management issues for [out] parameters - the following need to be understood and documented.
No progress last week.
Here is a rough first draft:
BSTRs need to be SysFreeString'd at end of life; ditto for when they are in structs or arrays.
COM interfaces need to be AddRef'd when used and Release'd at end of life.
Single longs, HWNDs, booleans, and structs are allocated by the caller and passed by reference. The marshaller does all the memory management. (I don't believe there are any structs with BSTRs or interface pointers.)
Arrays of longs - the server allocates the top level array and anything it points to; nothing needs to be free'd by the client. The marshalling code handles freeing anything on the client side.
TBD: How are VARIANTs handled? Like interfaces? These methods return VARIANTs: IAHyperlink::anchor/anchorTarget, IAValue::current/maximum/minimumValue
TBD: Are arrays of IUnknowns, e.g. IARelation::targets, correctly specified as **IUnknown?