My bad -  I somehow got the impression from Pete that NVDA couldn't see 
any HRESULTS.
But if you can distinguish E_* HRESULTS because Python throws an 
exception, then that's great.

So the IA2 spec shouldn't spec return values for any E_* HRESULTS.
We just need to make sure that you can tell the difference between S_OK 
and S_FALSE.

Simpler spec... Less code...   yay!   ;)

Pete, do you want me to open a doc bug for all of this?

Carolyn



From:
Michael Curran <[email protected]>
To:
[email protected]
Date:
14/04/2010 11:38 AM
Subject:
Re: [Accessibility-ia2] IA2 spec changes for cases where HRESULT is not 
S_OK
Sent by:
[email protected]



Hi,

I understand why the out params need to be something identifiable for 
S_FALSE, as we deal with this problem directly in Python with NVDA.

However,  I'm lost as to why out params mean anything for any of the E_* 
error values.

In Python's case, it will always raise an exception for any E_* value.
In VB I would have thought it would do the same?

Can someone please point out any languages that  hide the hResult by 
returning out params, and don't differenciate between S_OK and S_FALSE, 
yet don't cause some kind of exception or major error for E_* values?

If there is in deed languages that don't raise exceptions, then  these 
changes are completely fine.
If there are not, then when returning E_INVALIDARG it may not be 
necessary to mention what should happen to the out params.

Certainly I agree with the changes to out params for better handling 
S_FALSE.

Thanks
Mick




On 14/04/2010 5:24 PM, Alexander Surkov wrote:
> Hi. Looks fine with me however I have a question.
>
>> 3) IAccessibleText::selection
>>          Change:
>>          To:
>>                  S_FALSE         if there is nothing to return, [out] 
values
>> are -1s
>>                  E_INVALIDARG         if bad [in] passed, [out] values 
are
>
>> 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
>
> I confused by the difference between "nothing to return" and "bad [in]
> passed". It sounds like "bad [in]" means "nothing to return" and vise
> versa.
>
> Thank you.
> Alex.
>
>
> On Wed, Apr 14, 2010 at 5:54 AM, Pete Brunet<[email protected]>  wrote:
>> 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
>>
>> 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
>>
>>
> _______________________________________________
> Accessibility-ia2 mailing list
> [email protected]
> https://lists.linux-foundation.org/mailman/listinfo/accessibility-ia2

-- 
Michael Curran
email/msn/jabber: [email protected]
Skype/Twitter: md_curran
_______________________________________________
Accessibility-ia2 mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/accessibility-ia2



_______________________________________________
Accessibility-ia2 mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/accessibility-ia2

Reply via email to