Accessibility/IA2 1.3
Summary
This page describes proposed changes to next IAccessible2 specification.
Proposal
Relations
Propose: a way to get relations by type
interface IAccessible2_2: public IAccessible { /** * Return IEnumVariant of IAccessible2 objects for the given type. */ [propget] HRESULT relationTargets ( [in] BSTR type, [out, retval] IEnumVariant* relations ); };
See IA2 thread for discussion.
Object attribute
Propose: performant way to get object attribute value by name.
interface IAccessible2_2: public IAccessible { [propget] HRESULT attribute ( [in] BSTR name, [out, retval] BSTR* value ); };
See IA2 thread for discussion.
Text attributes
Propose: way to get range for list of text attributes.
interface IAccessibleText2 : public IAccessibleText { /** * Return range (start and end offsets) and text attributes that corresponds * the given attributes filter (filter format: "attr1, attr2") at the given * offset. */ [propget] HRESULT attributeRange ( [in] long offset, [in] BSTR attributesFilter, [out] long *startOffset, [out] long *endOffset, [out, retval] BSTR *textAttributes ); };
Hyperlinks from hypertext
Propose: performant way to iterate through hyper links
interface IAccessibleHypertext2 : public IAccessibleText { /** * Return IEnumVariant of IAccessibleHyperlink objects. */ [propget] HRESULT hyperlinks ( [out, retval] IEnumVariant* hyperlinks ); };
See IA2 thread for discussion.
Caret offset and accessible containing the caret
Propose: performant way to get caret offset within direct hypertext accessible containing the caret.
interface IAccessible2_2 : public IAccessible2 { /** * Return hypertext accessible in subtree of the accessible and caret * offset within it. */ [propget] HRESULT accessibleWithCaret ( [out, retval] IUnknown **accessible, [out] long* caretOffset ); };
Note: AT should call the method on document accessible for performance reason.
See IA2 thread for discussion.
Anchor target
Propose: a way to get anchor target (#anchor URL) if any since AT may miss scrolling_start event due to various reasons.
interface IAccessibleDocument : public IAccessible2 { /** * Return anchor target if any and still valid. */ [propget] HRESULT anchorTarget ( [out, retval] IUnknown **accessible ); };
See bug 617544 for original propose.
Document accessible
Propose: performant way to get a document accessible (IAccessibleDocument) the given accessible resides in.
interface IAccessible2_2 : public IAccessible2 { /** * Return document accessible (IAccessibleDocument) containing the accessible. */ [propget] HRESULT document ( [out, retval] IUnknown **accessible ); };
New relation types
Propose: be compatible with ATK and for relation types symmetry.
/** This object is a parent of a target object. */ const WCHAR *const IA2_RELATION_NODE_PARENT_OF = L"nodeParentOf"; /** opposite to IA2_RELATION_MEMBER_OF (Pete's possible addition) */ const WCHAR *const IA2_RELATION_GROUPING_OBJECT_FOR = L"groupingObjectFor"; /** opposite to IA2_RELATION_POPUP_INITIATOR_FOR (Pete's possible addition) */ const WCHAR *const IA2_RELATION_POPUP_INITIATOR_FOR = L"popupInitiatorFor";
See IA2 thread for discussion.
Reorder event details
Propose: performant way to update virtual buffers.
typedef struct IA2ChildrenChange { bool isInserted; long startIndex; long endIndex; }; interface IAccessible2_2: public IAccessible2 { [propget] HRESULT childrenChange ( [in] long maxChanges, [out, size_is(maxChanges), length_is(*nChanges)] IA2ChildrenChange **relations, [out, retval] long *nChanges ) };
Explicit name
Propose: let AT to ignore fallback names, i.e. names calculated from subtree of the object
interface IAccessible2_2 : public IAccessible2 { /** * Return accessible name pointed by author. */ [propget] HRESULT explicitName ( [out, retval] BSTR* name ); };
See bug 637578 for original idea.
Other ideas
Registry API
Note: IsWinEventHookInstalled may do all we need. See Mick's suggestion.
Propose: a way to enable set of features.
interface IAccessibleApplication2 : public IAccessibleApplication { /** * Enable set of features. Return set of features that were enabled. */ HRESULT requestFeature( [in] long features, [out] long supportedFeatures] };
Initially proposed features:
- Events
- ShowHideEvents - fire show/hide events
- ReorderEvent - fire reorder event
- TextEvents - fire text inserted/deleted/modified events
- TableEvents - fire table events
- HyperlinkEvents - fire hyper link events
- HypertextEvents - fire hyper text events
- Interfaces (?)
- davidb: Alexander do you mean something like IAccessible2 or more granular? - alex: more granular
- Accessible Tree (?)
- davidb: Alexander, what did you mean here?
Server implementation: it's up to the server to define set of base features that's always enabled (e.g. focus events); others are considered as optional and should be enabled on request. In order not to break existing AT, the server should maintain a whitelist of ATs for which the current support is preserved.
See IA2 list for discussion.