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)
|
||||
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))
|
||||
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);
|
||||
if (FAILED(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_provider_thread_remove_node(HUIANODE node) 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,
|
||||
IRawElementProviderSimple **elprov) DECLSPEC_HIDDEN;
|
||||
HRESULT create_msaa_provider(IAccessible *acc, LONG child_id, HWND hwnd, BOOL root_acc_known,
|
||||
BOOL is_root_acc, IRawElementProviderSimple **elprov) DECLSPEC_HIDDEN;
|
||||
|
||||
/* uia_utils.c */
|
||||
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
|
||||
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))
|
||||
{
|
||||
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)
|
||||
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))
|
||||
{
|
||||
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)
|
||||
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))
|
||||
{
|
||||
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)
|
||||
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);
|
||||
if (FAILED(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);
|
||||
if (SUCCEEDED(hr))
|
||||
*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)
|
||||
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))
|
||||
return hr;
|
||||
|
||||
|
@ -1440,8 +1440,8 @@ static const IProxyProviderWinEventHandlerVtbl msaa_winevent_handler_vtbl = {
|
|||
msaa_winevent_handler_RespondToWinEvent,
|
||||
};
|
||||
|
||||
HRESULT create_msaa_provider(IAccessible *acc, LONG child_id, HWND hwnd, BOOL known_root_acc,
|
||||
IRawElementProviderSimple **elprov)
|
||||
HRESULT create_msaa_provider(IAccessible *acc, LONG child_id, HWND hwnd, BOOL root_acc_known,
|
||||
BOOL is_root_acc, IRawElementProviderSimple **elprov)
|
||||
{
|
||||
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
|
||||
msaa_prov->hwnd = hwnd;
|
||||
|
||||
if (known_root_acc)
|
||||
msaa_prov->root_acc_check_ran = msaa_prov->is_root_acc = TRUE;
|
||||
if (root_acc_known)
|
||||
{
|
||||
msaa_prov->root_acc_check_ran = TRUE;
|
||||
msaa_prov->is_root_acc = is_root_acc;
|
||||
}
|
||||
|
||||
*elprov = &msaa_prov->IRawElementProviderSimple_iface;
|
||||
|
||||
|
@ -1515,7 +1518,7 @@ HRESULT WINAPI UiaProviderFromIAccessible(IAccessible *acc, LONG child_id, DWORD
|
|||
if (!hwnd)
|
||||
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)
|
||||
|
|
Loading…
Add table
Reference in a new issue