Accessibility/IA2 1.3
Summary
This page describes proposed changes to next IAccessible2 specification.
Proposal
Registry API
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?
- 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 fow which the current support is preserved.
See IA2 list for discussion.
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.