[PATCH 6/6] uiautomationcore: Implement MSAA accState based property IDs for MSAA providers.

Huw Davies huw.davies at physics.ox.ac.uk
Wed Jun 8 04:04:43 CDT 2022


On Wed, May 25, 2022 at 02:37:39PM -0400, Connor McAdams wrote:
>  static void test_UiaProviderFromIAccessible(void)
> diff --git a/dlls/uiautomationcore/uia_provider.c b/dlls/uiautomationcore/uia_provider.c
> index ab2b8305b10..69bc78e34c0 100644
> --- a/dlls/uiautomationcore/uia_provider.c
> +++ b/dlls/uiautomationcore/uia_provider.c
> @@ -32,6 +32,25 @@ static void variant_init_i4(VARIANT *v, int val)
>      V_I4(v) = val;
>  }
>  
> +static void variant_init_bool(VARIANT *v, BOOL val)
> +{
> +    V_VT(v) = VT_BOOL;
> +    V_BOOL(v) = val ? VARIANT_TRUE : VARIANT_FALSE;
> +}
> +
> +static BOOL msaa_check_acc_state(IAccessible *acc, VARIANT cid, LONG flag)

DWORD/ULONG flag.

> +{
> +    HRESULT hr;
> +    VARIANT v;
> +
> +    VariantInit(&v);
> +    hr = IAccessible_get_accState(acc, cid, &v);
> +    if (SUCCEEDED(hr) && V_VT(&v) == VT_I4 && (V_I4(&v) & flag))
> +        return TRUE;
> +
> +    return FALSE;
> +}
> +
>  static LONG msaa_role_to_uia_control_type(LONG role)
>  {
>      switch (role)
> @@ -214,6 +233,26 @@ HRESULT WINAPI msaa_provider_GetPropertyValue(IRawElementProviderSimple *iface,
>  
>          break;
>  
> +    case UIA_HasKeyboardFocusPropertyId:
> +        variant_init_bool(ret_val, msaa_check_acc_state(msaa_prov->acc, msaa_prov->cid,
> +                    STATE_SYSTEM_FOCUSED));

Unless you have need for these two helpers down the line, I'd combine
them, i.e. have _check_acc_state() return a VARIANT.

Huw.

P.S. bonus points will be awarded for using gitlab to send v2 ;-)



More information about the wine-devel mailing list