Please review the following...
Thanks to Carolyn who is implementing IA2 in Eclipse I believe the
following changes need to be made in next update to the spec.
1) IAccessibleHypertext::hyperlinkIndex
Change:
E_INVALIDARG if bad [in] passed, [out] value is NULL
To:
E_INVALIDARG if bad [in] passed, [out] value is -1
Because:
Setting the pointer to NULL does not make sense in
pass-by-reference world.
2) IAccessibleText::offsetAtPoint
Change:
E_INVALIDARG if bad [in] passed, [out] value is 0
To:
E_INVALIDARG if bad [in] passed, [out] value is -1
Because:
0 is a valid value for the offset, and AT that cannot
get the HRESULT will not be able to distinguish between S_OK and
E_INVALIDARG.
Add:
S_FALSE if nothing to return, [out] value is -1
Because:
The [in] values could all be valid, but x and y could
specify a valid screen position but not one associated with a caret offset.
3) IAccessibleText::selection
Change:
S_FALSE if there is nothing to return, [out]
values are 0s
E_INVALIDARG if bad [in] passed, [out] values
are 0s
To:
S_FALSE if there is nothing to return, [out]
values are -1s
E_INVALIDARG if bad [in] passed, [out] values
are -1s
Because:
0,0 is a valid value for the selection (i.e. the caret
is before the first character), and AT that cannot get the HRESULT will
not be able to distinguish between S_OK and S_FALSE/E_INVALIDARG.
4) IAccessible2::groupPosition
Change:
S_FALSE if no values are valid
To:
S_FALSE if no values are valid, [out] values are 0s
Because:
Although it can be determined from reading the parameter
specs, this should probably be stated with the return value as well, for
consistency and completeness.
5) IAccessibleHyperlink::anchor and IAccessibleHyperlink::anchorTarget
Change:
S_FALSE if there is nothing to return, [out]
value is NULL
E_INVALIDARG if bad [in] passed, [out] value is
NULL
To:
S_FALSE if there is nothing to return, [out]
value is a VARIANT with vt = VT_EMPTY
E_INVALIDARG if bad [in] passed, [out] value is
a VARIANT with vt = VT_EMPTY
Because:
The AT's will expect to see an "empty variant", not
NULL. http://msdn.microsoft.com/en-us/library/dd373687(VS.85).aspx
<http://msdn.microsoft.com/en-us/library/dd373687%28VS.85%29.aspx>
6) IAccessibleValue::currentValue
Change:
S_FALSE if there is nothing to return, [out]
value is NULL
To:
S_FALSE if there is nothing to return, [out]
value is a VARIANT with vt = VT_EMPTY
Because:
The AT's will expect to see an "empty variant", not NULL.
7) IAccessibleValue::maximumValue and IAccessibleValue::minimumValue
Add:
S_FALSE if there is nothing to return, [out]
value is a VARIANT with vt = VT_EMPTY
Because:
This should be consistent with
IAccessibleValue::currentValue.
Also modify the general note about variants slightly to mention
VT_EMPTY:
http://accessibility.linuxfoundation.org/a11yspecs/ia2/docs/html/_generalinfo.html#_variants
8) IAccessibleText::oldText and newText
Change:
S_FALSE if there is nothing to return, [out] value
is NULL
To:
S_FALSE if there is nothing to return, the values of
IA2TextSegment struct are set as follows: text = NULL, start = 0, end = 0.
Because:
Setting the [out] pointer to NULL does not make sense in
pass-by-reference world.
_______________________________________________
Accessibility-ia2 mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/accessibility-ia2