LF: Charter Text, Open A11y Branding/Identity - Janina
IAText::oldText/newText life cycle management
This is the proposed documentation for these attributes:
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.
The AT should be able to get all text by specifying -1 on the endOffset.
endOffset < startOffset should be an error.
Current Notes 8 Implementation
Use of a -1 endOffset returns an error. ATs currently are using textAtOffset with boundary ALL.
Use of endOffset < startOffset does not return an error.
Changing this behavior in Notes 8.0.1 should not cause any problems. The ATs should not be relying on a failure in the first case nor a success in the second. Pete is checking with the ATVs on the latter case.
IATable has limitation of children being cells. Andres has requested support for the case where the children are rows and columns which in turn have cells as children.
There is production code relying on the current behavior. What are the alternatives?
Add new methods to IATable?
Define an additional interface, IATable2, with a new design?
Python wrappers - Michael Stewart
The wrappers are almost done. An exercise program using/testing the wrappers is being written.
Waiting for IBM approval to release as BSD.
Methods which return arrays - what to do with the unneeded max parameter?
The Notes 8 team's preference is to not change the IDL and to ignore the parameter (rather than limiting the returned array). The JAWS developer said that was acceptable.
Documentation of memory management issues for [out] parameters - the following need to be understood and documented. 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?