uiautomationcore: Add support for marking the root IAccessible as known on non-root IAccessibles upon proxy provider creation.
Signed-off-by: Connor McAdams <cmcadams@codeweavers.com>
This commit is contained in:
parent
a2bf252c4b
commit
0254db3492
4 changed files with 18 additions and 15 deletions
|
@ -3013,7 +3013,7 @@ static SAFEARRAY WINAPI *default_uia_provider_callback(HWND hwnd, enum ProviderT
|
||||||
if (FAILED(hr) || !acc)
|
if (FAILED(hr) || !acc)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
hr = create_msaa_provider(acc, CHILDID_SELF, hwnd, TRUE, &elprov);
|
hr = create_msaa_provider(acc, CHILDID_SELF, hwnd, TRUE, TRUE, &elprov);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
WARN("Failed to create MSAA proxy provider with hr %#lx\n", hr);
|
WARN("Failed to create MSAA proxy provider with hr %#lx\n", hr);
|
||||||
|
|
||||||
|
|
|
@ -564,7 +564,7 @@ static HRESULT create_msaa_provider_from_hwnd(HWND hwnd, int in_child_id, IRawEl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hr = create_msaa_provider(acc, child_id, hwnd, in_child_id == CHILDID_SELF, &elprov);
|
hr = create_msaa_provider(acc, child_id, hwnd, TRUE, in_child_id == CHILDID_SELF, &elprov);
|
||||||
IAccessible_Release(acc);
|
IAccessible_Release(acc);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
|
@ -243,8 +243,8 @@ HRESULT create_base_hwnd_provider(HWND hwnd, IRawElementProviderSimple **elprov)
|
||||||
void uia_stop_provider_thread(void) DECLSPEC_HIDDEN;
|
void uia_stop_provider_thread(void) DECLSPEC_HIDDEN;
|
||||||
void uia_provider_thread_remove_node(HUIANODE node) DECLSPEC_HIDDEN;
|
void uia_provider_thread_remove_node(HUIANODE node) DECLSPEC_HIDDEN;
|
||||||
LRESULT uia_lresult_from_node(HUIANODE huianode) DECLSPEC_HIDDEN;
|
LRESULT uia_lresult_from_node(HUIANODE huianode) DECLSPEC_HIDDEN;
|
||||||
HRESULT create_msaa_provider(IAccessible *acc, LONG child_id, HWND hwnd, BOOL known_root_acc,
|
HRESULT create_msaa_provider(IAccessible *acc, LONG child_id, HWND hwnd, BOOL root_acc_known,
|
||||||
IRawElementProviderSimple **elprov) DECLSPEC_HIDDEN;
|
BOOL is_root_acc, IRawElementProviderSimple **elprov) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
/* uia_utils.c */
|
/* uia_utils.c */
|
||||||
HRESULT register_interface_in_git(IUnknown *iface, REFIID riid, DWORD *ret_cookie) DECLSPEC_HIDDEN;
|
HRESULT register_interface_in_git(IUnknown *iface, REFIID riid, DWORD *ret_cookie) DECLSPEC_HIDDEN;
|
||||||
|
|
|
@ -855,7 +855,7 @@ static HRESULT WINAPI msaa_fragment_Navigate(IRawElementProviderFragment *iface,
|
||||||
else
|
else
|
||||||
acc = msaa_prov->acc;
|
acc = msaa_prov->acc;
|
||||||
|
|
||||||
hr = create_msaa_provider(acc, CHILDID_SELF, NULL, FALSE, &elprov);
|
hr = create_msaa_provider(acc, CHILDID_SELF, NULL, FALSE, FALSE, &elprov);
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
struct msaa_provider *prov = impl_from_msaa_provider(elprov);
|
struct msaa_provider *prov = impl_from_msaa_provider(elprov);
|
||||||
|
@ -886,7 +886,7 @@ static HRESULT WINAPI msaa_fragment_Navigate(IRawElementProviderFragment *iface,
|
||||||
if (FAILED(hr) || !acc)
|
if (FAILED(hr) || !acc)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
hr = create_msaa_provider(acc, child_id, NULL, FALSE, &elprov);
|
hr = create_msaa_provider(acc, child_id, NULL, FALSE, FALSE, &elprov);
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
struct msaa_provider *prov = impl_from_msaa_provider(elprov);
|
struct msaa_provider *prov = impl_from_msaa_provider(elprov);
|
||||||
|
@ -936,7 +936,7 @@ static HRESULT WINAPI msaa_fragment_Navigate(IRawElementProviderFragment *iface,
|
||||||
if (FAILED(hr) || !acc)
|
if (FAILED(hr) || !acc)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
hr = create_msaa_provider(acc, child_id, NULL, FALSE, &elprov);
|
hr = create_msaa_provider(acc, child_id, NULL, FALSE, FALSE, &elprov);
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
struct msaa_provider *prov = impl_from_msaa_provider(elprov);
|
struct msaa_provider *prov = impl_from_msaa_provider(elprov);
|
||||||
|
@ -1031,7 +1031,7 @@ static HRESULT WINAPI msaa_fragment_get_FragmentRoot(IRawElementProviderFragment
|
||||||
if (FAILED(hr) || !acc)
|
if (FAILED(hr) || !acc)
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
hr = create_msaa_provider(acc, CHILDID_SELF, msaa_prov->hwnd, TRUE, &elprov);
|
hr = create_msaa_provider(acc, CHILDID_SELF, msaa_prov->hwnd, TRUE, TRUE, &elprov);
|
||||||
IAccessible_Release(acc);
|
IAccessible_Release(acc);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
@ -1154,7 +1154,7 @@ static HRESULT msaa_acc_get_focus(struct msaa_provider *prov, struct msaa_provid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hr = create_msaa_provider(focus_acc, focus_cid, hwnd, FALSE, &elprov);
|
hr = create_msaa_provider(focus_acc, focus_cid, hwnd, FALSE, FALSE, &elprov);
|
||||||
IAccessible_Release(focus_acc);
|
IAccessible_Release(focus_acc);
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
*out_prov = impl_from_msaa_provider(elprov);
|
*out_prov = impl_from_msaa_provider(elprov);
|
||||||
|
@ -1176,7 +1176,7 @@ static HRESULT WINAPI msaa_fragment_root_GetFocus(IRawElementProviderFragmentRoo
|
||||||
if (V_I4(&msaa_prov->cid) != CHILDID_SELF)
|
if (V_I4(&msaa_prov->cid) != CHILDID_SELF)
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
||||||
hr = create_msaa_provider(msaa_prov->acc, CHILDID_SELF, msaa_prov->hwnd, FALSE, &elprov);
|
hr = create_msaa_provider(msaa_prov->acc, CHILDID_SELF, msaa_prov->hwnd, FALSE, FALSE, &elprov);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
|
@ -1440,8 +1440,8 @@ static const IProxyProviderWinEventHandlerVtbl msaa_winevent_handler_vtbl = {
|
||||||
msaa_winevent_handler_RespondToWinEvent,
|
msaa_winevent_handler_RespondToWinEvent,
|
||||||
};
|
};
|
||||||
|
|
||||||
HRESULT create_msaa_provider(IAccessible *acc, LONG child_id, HWND hwnd, BOOL known_root_acc,
|
HRESULT create_msaa_provider(IAccessible *acc, LONG child_id, HWND hwnd, BOOL root_acc_known,
|
||||||
IRawElementProviderSimple **elprov)
|
BOOL is_root_acc, IRawElementProviderSimple **elprov)
|
||||||
{
|
{
|
||||||
struct msaa_provider *msaa_prov = calloc(1, sizeof(*msaa_prov));
|
struct msaa_provider *msaa_prov = calloc(1, sizeof(*msaa_prov));
|
||||||
|
|
||||||
|
@ -1470,8 +1470,11 @@ HRESULT create_msaa_provider(IAccessible *acc, LONG child_id, HWND hwnd, BOOL kn
|
||||||
else
|
else
|
||||||
msaa_prov->hwnd = hwnd;
|
msaa_prov->hwnd = hwnd;
|
||||||
|
|
||||||
if (known_root_acc)
|
if (root_acc_known)
|
||||||
msaa_prov->root_acc_check_ran = msaa_prov->is_root_acc = TRUE;
|
{
|
||||||
|
msaa_prov->root_acc_check_ran = TRUE;
|
||||||
|
msaa_prov->is_root_acc = is_root_acc;
|
||||||
|
}
|
||||||
|
|
||||||
*elprov = &msaa_prov->IRawElementProviderSimple_iface;
|
*elprov = &msaa_prov->IRawElementProviderSimple_iface;
|
||||||
|
|
||||||
|
@ -1515,7 +1518,7 @@ HRESULT WINAPI UiaProviderFromIAccessible(IAccessible *acc, LONG child_id, DWORD
|
||||||
if (!hwnd)
|
if (!hwnd)
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
|
||||||
return create_msaa_provider(acc, child_id, hwnd, FALSE, elprov);
|
return create_msaa_provider(acc, child_id, hwnd, FALSE, FALSE, elprov);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT uia_get_hr_for_last_error(void)
|
static HRESULT uia_get_hr_for_last_error(void)
|
||||||
|
|
Loading…
Add table
Reference in a new issue