mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-14 17:26:22 +00:00
uiautomationcore: Retrieve HWND from HUIANODE provider.
Signed-off-by: Connor McAdams <cmcadams@codeweavers.com>
This commit is contained in:
parent
3106380d58
commit
cf9d7ee4b4
|
@ -3647,8 +3647,8 @@ static const struct prov_method_sequence node_from_prov2[] = {
|
|||
{ &Provider, PROV_GET_PROVIDER_OPTIONS },
|
||||
/* Win10v1507 and below call this. */
|
||||
{ &Provider, PROV_GET_PROPERTY_VALUE, METHOD_OPTIONAL }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider, PROV_GET_HOST_RAW_ELEMENT_PROVIDER, METHOD_TODO },
|
||||
{ &Provider, PROV_GET_PROPERTY_VALUE, METHOD_TODO }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider, PROV_GET_HOST_RAW_ELEMENT_PROVIDER },
|
||||
{ &Provider, PROV_GET_PROPERTY_VALUE }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider, FRAG_NAVIGATE, METHOD_TODO }, /* NavigateDirection_Parent */
|
||||
/* Only called on Windows versions past Win10v1507. */
|
||||
{ &Provider, PROV_GET_PROVIDER_OPTIONS, METHOD_OPTIONAL },
|
||||
|
@ -3660,8 +3660,8 @@ static const struct prov_method_sequence node_from_prov3[] = {
|
|||
{ &Provider_child, PROV_GET_PROVIDER_OPTIONS },
|
||||
/* Win10v1507 and below call this. */
|
||||
{ &Provider_child, PROV_GET_PROPERTY_VALUE, METHOD_OPTIONAL }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider_child, PROV_GET_HOST_RAW_ELEMENT_PROVIDER, METHOD_TODO },
|
||||
{ &Provider_child, PROV_GET_PROPERTY_VALUE, METHOD_TODO }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider_child, PROV_GET_HOST_RAW_ELEMENT_PROVIDER },
|
||||
{ &Provider_child, PROV_GET_PROPERTY_VALUE }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider_child, FRAG_NAVIGATE, METHOD_TODO }, /* NavigateDirection_Parent */
|
||||
/* Only called on Windows versions past Win10v1507. */
|
||||
{ &Provider_child, PROV_GET_PROVIDER_OPTIONS, METHOD_OPTIONAL },
|
||||
|
@ -3673,7 +3673,7 @@ static const struct prov_method_sequence node_from_prov4[] = {
|
|||
{ &Provider, PROV_GET_PROVIDER_OPTIONS },
|
||||
/* Win10v1507 and below call this. */
|
||||
{ &Provider, PROV_GET_PROPERTY_VALUE, METHOD_OPTIONAL }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider, PROV_GET_HOST_RAW_ELEMENT_PROVIDER, METHOD_TODO },
|
||||
{ &Provider, PROV_GET_HOST_RAW_ELEMENT_PROVIDER },
|
||||
{ &Provider, FRAG_NAVIGATE, METHOD_TODO }, /* NavigateDirection_Parent */
|
||||
/* Only called on Windows versions past Win10v1507. */
|
||||
{ &Provider, PROV_GET_PROVIDER_OPTIONS, METHOD_OPTIONAL },
|
||||
|
@ -3685,7 +3685,7 @@ static const struct prov_method_sequence node_from_prov5[] = {
|
|||
{ &Provider, PROV_GET_PROVIDER_OPTIONS },
|
||||
/* Win10v1507 and below call this. */
|
||||
{ &Provider, PROV_GET_PROPERTY_VALUE, METHOD_OPTIONAL }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider, PROV_GET_HOST_RAW_ELEMENT_PROVIDER, METHOD_TODO },
|
||||
{ &Provider, PROV_GET_HOST_RAW_ELEMENT_PROVIDER },
|
||||
{ &Provider2, PROV_GET_PROVIDER_OPTIONS, METHOD_TODO },
|
||||
/* Win10v1507 and below call this. */
|
||||
{ &Provider2, PROV_GET_PROPERTY_VALUE, METHOD_OPTIONAL }, /* UIA_NativeWindowHandlePropertyId */
|
||||
|
@ -3710,7 +3710,7 @@ static const struct prov_method_sequence node_from_prov6[] = {
|
|||
{ &Provider, PROV_GET_PROVIDER_OPTIONS },
|
||||
/* Win10v1507 and below call this. */
|
||||
{ &Provider, PROV_GET_PROPERTY_VALUE, METHOD_OPTIONAL }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider, PROV_GET_HOST_RAW_ELEMENT_PROVIDER, METHOD_TODO },
|
||||
{ &Provider, PROV_GET_HOST_RAW_ELEMENT_PROVIDER },
|
||||
{ &Provider2, PROV_GET_PROVIDER_OPTIONS, METHOD_TODO },
|
||||
/* Win10v1507 and below call this. */
|
||||
{ &Provider2, PROV_GET_PROPERTY_VALUE, METHOD_OPTIONAL }, /* UIA_NativeWindowHandlePropertyId */
|
||||
|
@ -3735,7 +3735,7 @@ static const struct prov_method_sequence node_from_prov7[] = {
|
|||
{ &Provider_child, PROV_GET_PROVIDER_OPTIONS },
|
||||
/* Win10v1507 and below call this. */
|
||||
{ &Provider_child, PROV_GET_PROPERTY_VALUE, METHOD_OPTIONAL }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider_child, PROV_GET_HOST_RAW_ELEMENT_PROVIDER, METHOD_TODO },
|
||||
{ &Provider_child, PROV_GET_HOST_RAW_ELEMENT_PROVIDER },
|
||||
{ &Provider2, PROV_GET_PROVIDER_OPTIONS, METHOD_TODO },
|
||||
/* Win10v1507 and below call this. */
|
||||
{ &Provider2, PROV_GET_PROPERTY_VALUE, METHOD_OPTIONAL }, /* UIA_NativeWindowHandlePropertyId */
|
||||
|
@ -3760,8 +3760,8 @@ static const struct prov_method_sequence node_from_prov8[] = {
|
|||
{ &Provider, PROV_GET_PROVIDER_OPTIONS },
|
||||
/* Win10v1507 and below call this. */
|
||||
{ &Provider, PROV_GET_PROPERTY_VALUE, METHOD_OPTIONAL }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider, PROV_GET_HOST_RAW_ELEMENT_PROVIDER, METHOD_TODO },
|
||||
{ &Provider, PROV_GET_PROPERTY_VALUE, METHOD_TODO }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider, PROV_GET_HOST_RAW_ELEMENT_PROVIDER },
|
||||
{ &Provider, PROV_GET_PROPERTY_VALUE }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider, FRAG_NAVIGATE, METHOD_TODO }, /* NavigateDirection_Parent */
|
||||
/* Only called on Windows versions past Win10v1507. */
|
||||
{ &Provider, PROV_GET_PROVIDER_OPTIONS, METHOD_OPTIONAL },
|
||||
|
@ -4153,8 +4153,8 @@ static const struct prov_method_sequence get_elem_prop_seq[] = {
|
|||
{ &Provider_child, PROV_GET_PROVIDER_OPTIONS },
|
||||
/* Win10v1507 and below call this. */
|
||||
{ &Provider_child, PROV_GET_PROPERTY_VALUE, METHOD_OPTIONAL }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider_child, PROV_GET_HOST_RAW_ELEMENT_PROVIDER, METHOD_TODO },
|
||||
{ &Provider_child, PROV_GET_PROPERTY_VALUE, METHOD_TODO }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider_child, PROV_GET_HOST_RAW_ELEMENT_PROVIDER },
|
||||
{ &Provider_child, PROV_GET_PROPERTY_VALUE }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider_child, FRAG_NAVIGATE, METHOD_TODO }, /* NavigateDirection_Parent */
|
||||
/* Only called on Windows versions past Win10v1507. */
|
||||
{ &Provider_child, PROV_GET_PROVIDER_OPTIONS, METHOD_OPTIONAL },
|
||||
|
@ -4168,15 +4168,15 @@ static const struct prov_method_sequence get_elem_arr_prop_seq[] = {
|
|||
{ &Provider_child, PROV_GET_PROVIDER_OPTIONS },
|
||||
/* Win10v1507 and below call this. */
|
||||
{ &Provider_child, PROV_GET_PROPERTY_VALUE, METHOD_OPTIONAL }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider_child, PROV_GET_HOST_RAW_ELEMENT_PROVIDER, METHOD_TODO },
|
||||
{ &Provider_child, PROV_GET_PROPERTY_VALUE, METHOD_TODO }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider_child, PROV_GET_HOST_RAW_ELEMENT_PROVIDER },
|
||||
{ &Provider_child, PROV_GET_PROPERTY_VALUE }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider_child, FRAG_NAVIGATE, METHOD_TODO }, /* NavigateDirection_Parent */
|
||||
{ &Provider_child, PROV_GET_PROVIDER_OPTIONS, METHOD_TODO },
|
||||
{ &Provider_child2, PROV_GET_PROVIDER_OPTIONS },
|
||||
/* Win10v1507 and below call this. */
|
||||
{ &Provider_child2, PROV_GET_PROPERTY_VALUE, METHOD_OPTIONAL }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider_child2, PROV_GET_HOST_RAW_ELEMENT_PROVIDER, METHOD_TODO },
|
||||
{ &Provider_child2, PROV_GET_PROPERTY_VALUE, METHOD_TODO }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider_child2, PROV_GET_HOST_RAW_ELEMENT_PROVIDER },
|
||||
{ &Provider_child2, PROV_GET_PROPERTY_VALUE }, /* UIA_NativeWindowHandlePropertyId */
|
||||
{ &Provider_child2, FRAG_NAVIGATE, METHOD_TODO }, /* NavigateDirection_Parent */
|
||||
{ &Provider_child2, PROV_GET_PROVIDER_OPTIONS, METHOD_TODO },
|
||||
{ &Provider_child, PROV_GET_PROPERTY_VALUE },
|
||||
|
|
|
@ -160,6 +160,37 @@ static HRESULT get_global_interface_table(IGlobalInterfaceTable **git)
|
|||
return hr;
|
||||
}
|
||||
|
||||
static HWND get_hwnd_from_provider(IRawElementProviderSimple *elprov)
|
||||
{
|
||||
IRawElementProviderSimple *host_prov;
|
||||
HRESULT hr;
|
||||
VARIANT v;
|
||||
HWND hwnd;
|
||||
|
||||
hwnd = NULL;
|
||||
VariantInit(&v);
|
||||
hr = IRawElementProviderSimple_get_HostRawElementProvider(elprov, &host_prov);
|
||||
if (SUCCEEDED(hr) && host_prov)
|
||||
{
|
||||
hr = IRawElementProviderSimple_GetPropertyValue(host_prov, UIA_NativeWindowHandlePropertyId, &v);
|
||||
if (SUCCEEDED(hr) && (V_VT(&v) == VT_I4))
|
||||
hwnd = UlongToHandle(V_I4(&v));
|
||||
|
||||
VariantClear(&v);
|
||||
IRawElementProviderSimple_Release(host_prov);
|
||||
}
|
||||
|
||||
if (!IsWindow(hwnd))
|
||||
{
|
||||
hr = IRawElementProviderSimple_GetPropertyValue(elprov, UIA_NativeWindowHandlePropertyId, &v);
|
||||
if (SUCCEEDED(hr) && (V_VT(&v) == VT_I4))
|
||||
hwnd = UlongToHandle(V_I4(&v));
|
||||
VariantClear(&v);
|
||||
}
|
||||
|
||||
return hwnd;
|
||||
}
|
||||
|
||||
/*
|
||||
* IWineUiaNode interface.
|
||||
*/
|
||||
|
@ -169,6 +200,8 @@ struct uia_node {
|
|||
|
||||
IWineUiaProvider *prov;
|
||||
DWORD git_cookie;
|
||||
|
||||
HWND hwnd;
|
||||
};
|
||||
|
||||
static inline struct uia_node *impl_from_IWineUiaNode(IWineUiaNode *iface)
|
||||
|
@ -482,6 +515,7 @@ static HRESULT create_wine_uia_provider(struct uia_node *node, IRawElementProvid
|
|||
prov->elprov = elprov;
|
||||
prov->ref = 1;
|
||||
node->prov = &prov->IWineUiaProvider_iface;
|
||||
node->hwnd = get_hwnd_from_provider(elprov);
|
||||
|
||||
/*
|
||||
* If the UseComThreading ProviderOption is specified, all calls to the
|
||||
|
|
Loading…
Reference in a new issue