45 memset(nodes, 0,
sizeof(*nodes));
54 IWineUiaNode_AddRef((IWineUiaNode *)
node);
67 for (
i = 0;
i < elems;
i++)
89 for (
i = 0;
i < elems;
i++)
91 IRawElementProviderSimple *elprov;
99 hr = IUnknown_QueryInterface(unk, &IID_IRawElementProviderSimple, (
void **)&elprov);
100 IUnknown_Release(unk);
108 IRawElementProviderSimple_Release(elprov);
143 for (
i = 0;
i < (ubound + 1);
i++)
174 IRawElementProviderSimple *host_prov;
181 hr = IRawElementProviderSimple_get_HostRawElementProvider(elprov, &host_prov);
184 hr = IRawElementProviderSimple_GetPropertyValue(host_prov, UIA_NativeWindowHandlePropertyId, &
v);
189 IRawElementProviderSimple_Release(host_prov);
194 hr = IRawElementProviderSimple_GetPropertyValue(elprov, UIA_NativeWindowHandlePropertyId, &
v);
205 IRawElementProviderFragmentRoot *elroot, *elroot2;
206 IRawElementProviderSimple *elprov2, *
ret;
207 IRawElementProviderFragment *elfrag;
213 hr = IRawElementProviderSimple_QueryInterface(elprov, &IID_IRawElementProviderFragment, (
void **)&elfrag);
219 elroot = elroot2 =
NULL;
230 hr = IRawElementProviderFragment_get_FragmentRoot(elfrag, &elroot);
231 IRawElementProviderFragment_Release(elfrag);
232 if (
FAILED(
hr) || !elroot || (elroot == elroot2))
235 hr = IRawElementProviderFragmentRoot_QueryInterface(elroot, &IID_IRawElementProviderSimple, (
void **)&elprov2);
246 hr = IRawElementProviderSimple_QueryInterface(elprov2, &IID_IRawElementProviderFragment, (
void **)&elfrag);
247 IRawElementProviderSimple_Release(elprov2);
252 IRawElementProviderFragmentRoot_Release(elroot2);
259 IRawElementProviderFragmentRoot_Release(elroot);
261 IRawElementProviderFragmentRoot_Release(elroot2);
281 ERR(
"Node %p has no provider at idx %d\n",
node,
idx);
288 IWineUiaProvider *prov;
292 hr = IWineUiaNode_get_provider(
node,
idx, &prov);
296 hr = IWineUiaProvider_get_prop_val(prov, prop_info, out_val);
297 IWineUiaProvider_Release(prov);
304 IWineUiaProvider *prov;
308 hr = IWineUiaNode_get_provider(
node,
idx, &prov);
312 hr = IWineUiaProvider_get_prov_opts(prov, out_opts);
313 IWineUiaProvider_Release(prov);
320 IWineUiaProvider *prov;
324 hr = IWineUiaNode_get_provider(
node,
idx, &prov);
328 hr = IWineUiaProvider_has_parent(prov, out_val);
329 IWineUiaProvider_Release(prov);
336 IWineUiaProvider *prov;
340 hr = IWineUiaNode_get_provider(
node,
idx, &prov);
344 hr = IWineUiaProvider_navigate(prov, nav_dir, ret_val);
345 IWineUiaProvider_Release(prov);
352 IWineUiaProvider *prov;
356 hr = IWineUiaNode_get_provider(
node,
idx, &prov);
360 hr = IWineUiaProvider_get_focus(prov,
flags, ret_val);
361 IWineUiaProvider_Release(prov);
368 IWineUiaProvider *prov;
371 hr = IWineUiaNode_get_provider(
node,
idx, &prov);
375 hr = IWineUiaProvider_attach_event(prov, (
LONG_PTR)huiaevent);
376 IWineUiaProvider_Release(prov);
382 LONG child_id, IProxyProviderWinEventSink *
sink)
384 IWineUiaProvider *prov;
387 hr = IWineUiaNode_get_provider(
node,
idx, &prov);
392 IWineUiaProvider_Release(prov);
399 IWineUiaProvider *prov;
403 hr = IWineUiaNode_get_provider(
node,
idx, &prov);
407 hr = IWineUiaProvider_create_node_from_prov(prov,
flags, ret_val);
408 IWineUiaProvider_Release(prov);
424 IWineUiaNode_AddRef(iface);
449 if (
node->git_cookie[
i])
452 WARN(
"Failed to get revoke provider interface from GIT\n");
456 IWineUiaProvider_Release(
node->prov[
i]);
461 if (
node->nested_node)
475 TRACE(
"(%p, %d, %p)\n", iface,
idx, out_prov);
478 if (
node->disconnected)
485 if (
node->git_cookie[prov_type])
487 IWineUiaProvider *
prov;
498 *out_prov =
node->prov[prov_type];
499 IWineUiaProvider_AddRef(
node->prov[prov_type]);
515 if (
node->disconnected)
539 if (
node->disconnected)
541 ERR(
"Attempted to disconnect node which was already disconnected.\n");
547 if (
node->git_cookie[prov_type])
550 WARN(
"Failed to get revoke provider interface from GIT\n");
551 node->git_cookie[prov_type] = 0;
554 IWineUiaProvider_Release(
node->prov[prov_type]);
558 node->prov_count = 0;
575 IWineUiaEvent **ret_event)
579 int old_event_advisers_count;
591 *ret_event = &
event->IWineUiaEvent_iface;
593 old_event_advisers_count =
event->event_advisers_count;
597 IWineUiaEvent_Release(&
event->IWineUiaEvent_iface);
607 if (!(*ret_event) &&
event->event_id && (
event->event_advisers_count != old_event_advisers_count))
608 hr = IWineUiaEvent_advise_events(&
event->IWineUiaEvent_iface,
TRUE, old_event_advisers_count);
645 node->ignore_clientside_hwnd_provs =
TRUE;
661 if (
node->no_prepare)
667 if (
i ==
node->creator_prov_type)
669 node->creator_prov_idx = prov_idx;
672 else if (
node->prov[
i])
694 node->parent_link_idx = prov_idx;
701 if (
node->ignore_com_threading)
715 hr = IRawElementProviderSimple_get_ProviderOptions(prov->
elprov, &prov_opts);
728 &
node->git_cookie[
i]);
748 FIXME(
"Cloning of nested nodes currently unimplemented\n");
756 FIXME(
"Cloning of nested node providers currently unimplemented\n");
770 if (!in_node_data->
prov[
i])
790 *out_node = (
void *)&
node->IWineUiaNode_iface;
791 TRACE(
"Created clone node %p from node %p\n", *out_node, in_node);
795 IWineUiaNode_Release(&
node->IWineUiaNode_iface);
802 if (
node->creator_prov_idx ==
node->parent_link_idx)
858 int prov_idx = start_prov_idx;
859 HUIANODE tmp_node =
NULL;
863 while ((prov_idx >= 0) && (prov_idx < node->
prov_count))
932 WARN(
"Child navigation failed with hr %#lx\n",
hr);
945 WARN(
"Sibling navigation failed with hr %#lx\n",
hr);
956 WARN(
"Parent navigation failed with hr %#lx\n",
hr);
984 WARN(
"Parent navigation failed with hr %#lx\n",
hr);
988 WARN(
"Invalid NavigateDirection %d\n", nav_dir);
996 WARN(
"UiaHUiaNodeFromVariant failed with hr %#lx\n",
hr);
1048 FIXME(
"ConditionType %d based navigation for dir %d is not implemented.\n", cond->
ConditionType, nav_dir);
1056 WARN(
"Invalid NavigateDirection %d\n", nav_dir);
1093 int dir,
BOOL at_root_level, HUIANODE *out_node)
1096 HUIANODE node2 =
NULL;
1101 IWineUiaNode_AddRef(&
node->IWineUiaNode_iface);
1105 if (
FAILED(
hr) || node2 || !at_root_level)
1120 IWineUiaNode_Release(&
node->IWineUiaNode_iface);
1124 IWineUiaNode_Release(&
node->IWineUiaNode_iface);
1152 struct UiaCondition *ascending_stop_cond,
int traversal_opts,
BOOL at_root_level,
BOOL find_first,
1155 HUIANODE
node = huianode;
1162 HUIANODE node2 =
NULL;
1203 if (max_depth < 0 || (*cur_depth) <= max_depth)
1212 traversal_opts,
FALSE, find_first, root_found, max_depth, cur_depth, out_nodes);
1232 at_root_level, &node2);
1235 at_root_level, &node2);
1290 for (
i = 0;
i <
node->prov_count;
i++)
1302 if (
node->parent_link_idx ==
i)
1327 V_BSTR(out_desc) = node_desc;
1364 IWineUiaProvider_AddRef(iface);
1373 TRACE(
"%p, refcount %ld\n", prov,
ref);
1383 TRACE(
"%p, refcount %ld\n", prov,
ref);
1386 IRawElementProviderSimple_Release(prov->
elprov);
1402 IRawElementProviderSimple_Release(
elprov);
1429 hr = IRawElementProviderSimple_GetPropertyValue(prov->
elprov, prop_info->
prop_id, &
v);
1433 switch (prop_info->
type)
1435 case UIAutomationType_Int:
1438 WARN(
"Invalid vt %d for UIAutomationType_Int\n",
V_VT(&
v));
1444 case UIAutomationType_IntArray:
1447 WARN(
"Invalid vt %d for UIAutomationType_IntArray\n",
V_VT(&
v));
1453 case UIAutomationType_Double:
1456 WARN(
"Invalid vt %d for UIAutomationType_Double\n",
V_VT(&
v));
1462 case UIAutomationType_DoubleArray:
1465 WARN(
"Invalid vt %d for UIAutomationType_DoubleArray\n",
V_VT(&
v));
1471 case UIAutomationType_Bool:
1474 WARN(
"Invalid vt %d for UIAutomationType_Bool\n",
V_VT(&
v));
1480 case UIAutomationType_String:
1483 WARN(
"Invalid vt %d for UIAutomationType_String\n",
V_VT(&
v));
1489 case UIAutomationType_Element:
1491 IRawElementProviderSimple *
elprov;
1495 WARN(
"Invalid vt %d for UIAutomationType_Element\n",
V_VT(&
v));
1499 hr = IUnknown_QueryInterface(
V_UNKNOWN(&
v), &IID_IRawElementProviderSimple,
1512 case UIAutomationType_ElementArray:
1515 WARN(
"Invalid vt %d for UIAutomationType_ElementArray\n",
V_VT(&
v));
1542 case UIA_RuntimeIdPropertyId:
1544 IRawElementProviderFragment *elfrag;
1549 hr = IRawElementProviderSimple_QueryInterface(prov->
elprov, &IID_IRawElementProviderFragment, (
void **)&elfrag);
1553 hr = IRawElementProviderFragment_GetRuntimeId(elfrag, &
sa);
1554 IRawElementProviderFragment_Release(elfrag);
1575 IRawElementProviderSimple *
elprov;
1585 hr = IRawElementProviderSimple_get_ProviderOptions(
elprov, &prov_opts);
1586 IRawElementProviderSimple_Release(
elprov);
1588 WARN(
"get_ProviderOptions for root provider failed with %#lx\n",
hr);
1599 case UIA_BoundingRectanglePropertyId:
1601 IRawElementProviderFragment *elfrag;
1603 double rect_vals[4];
1607 hr = IRawElementProviderSimple_QueryInterface(prov->
elprov, &IID_IRawElementProviderFragment, (
void **)&elfrag);
1611 hr = IRawElementProviderFragment_get_BoundingRectangle(elfrag, &
rect);
1612 IRawElementProviderFragment_Release(elfrag);
1619 rect_vals[0] =
rect.left;
1620 rect_vals[1] =
rect.top;
1621 rect_vals[2] =
rect.width;
1622 rect_vals[3] =
rect.height;
1638 case UIA_ProviderDescriptionPropertyId:
1641 static const WCHAR *provider_origin =
L" (unmanaged:uiautomationcore.dll)";
1642 static const WCHAR *default_desc =
L"Unidentified provider";
1662 V_BSTR(ret_val) = prov_desc_str;
1680 unk = pattern_prov =
NULL;
1681 hr = IRawElementProviderSimple_GetPatternProvider(prov->
elprov, prop_info->
pattern_id, &unk);
1685 hr = IUnknown_QueryInterface(unk, pattern_info->
pattern_iid, (
void **)&pattern_prov);
1686 IUnknown_Release(unk);
1689 WARN(
"Failed to get pattern interface from object\n");
1695 case UIA_ValueIsReadOnlyPropertyId:
1699 hr = IValueProvider_get_IsReadOnly((IValueProvider *)pattern_prov, &
val);
1705 case UIA_LegacyIAccessibleChildIdPropertyId:
1709 hr = ILegacyIAccessibleProvider_get_ChildId((ILegacyIAccessibleProvider *)pattern_prov, &
val);
1715 case UIA_LegacyIAccessibleRolePropertyId:
1719 hr = ILegacyIAccessibleProvider_get_Role((ILegacyIAccessibleProvider *)pattern_prov, &
val);
1729 IUnknown_Release(pattern_prov);
1738 TRACE(
"%p, %p, %p\n", iface, prop_info, ret_val);
1765 TRACE(
"%p, %p\n", iface, out_opts);
1768 hr = IRawElementProviderSimple_get_ProviderOptions(prov->
elprov, &prov_opts);
1770 *out_opts = prov_opts;
1779 TRACE(
"%p, %p\n", iface, out_val);
1783 IRawElementProviderFragment *elfrag, *elfrag2;
1787 hr = IRawElementProviderSimple_QueryInterface(prov->
elprov, &IID_IRawElementProviderFragment, (
void **)&elfrag);
1791 IRawElementProviderFragment_Release(elfrag);
1795 IRawElementProviderFragment_Release(elfrag2);
1810 IRawElementProviderFragment *elfrag, *elfrag2;
1813 TRACE(
"%p, %d, %p\n", iface, nav_dir, out_val);
1816 hr = IRawElementProviderSimple_QueryInterface(prov->
elprov, &IID_IRawElementProviderFragment, (
void **)&elfrag);
1820 hr = IRawElementProviderFragment_Navigate(elfrag, nav_dir, &elfrag2);
1821 IRawElementProviderFragment_Release(elfrag);
1824 IRawElementProviderSimple *
elprov;
1826 hr = IRawElementProviderFragment_QueryInterface(elfrag2, &IID_IRawElementProviderSimple, (
void **)&
elprov);
1827 IRawElementProviderFragment_Release(elfrag2);
1842 IRawElementProviderFragmentRoot *elroot;
1843 IRawElementProviderFragment *elfrag;
1844 IRawElementProviderSimple *
elprov;
1847 TRACE(
"%p, %#lx, %p\n", iface,
flags, out_val);
1850 FIXME(
"PROV_METHOD_FLAG_RETURN_NODE_LRES ignored for normal providers.\n");
1853 hr = IRawElementProviderSimple_QueryInterface(prov->
elprov, &IID_IRawElementProviderFragmentRoot, (
void **)&elroot);
1857 hr = IRawElementProviderFragmentRoot_GetFocus(elroot, &elfrag);
1858 IRawElementProviderFragmentRoot_Release(elroot);
1862 hr = IRawElementProviderFragment_QueryInterface(elfrag, &IID_IRawElementProviderSimple, (
void **)&
elprov);
1863 IRawElementProviderFragment_Release(elfrag);
1878 IRawElementProviderFragmentRoot *elroot =
NULL;
1879 IRawElementProviderFragment *elfrag;
1883 TRACE(
"%p, %#Ix\n", iface, huiaevent);
1885 hr = IRawElementProviderSimple_QueryInterface(prov->
elprov, &IID_IRawElementProviderFragment, (
void **)&elfrag);
1889 hr = IRawElementProviderFragment_get_FragmentRoot(elfrag, &elroot);
1899 hr = IRawElementProviderFragment_GetEmbeddedFragmentRoots(elfrag, &embedded_roots);
1901 WARN(
"GetEmbeddedFragmentRoots failed with hr %#lx\n",
hr);
1906 IProxyProviderWinEventHandler *winevent_handler;
1907 IRawElementProviderAdviseEvents *advise_events;
1910 &IID_IProxyProviderWinEventHandler, (
void **)&winevent_handler)))
1914 WARN(
"Failed to add hwnd for win_event, hr %#lx\n",
hr);
1915 IProxyProviderWinEventHandler_Release(winevent_handler);
1917 else if (
SUCCEEDED(IRawElementProviderFragmentRoot_QueryInterface(elroot, &IID_IRawElementProviderAdviseEvents,
1918 (
void **)&advise_events)))
1921 IRawElementProviderAdviseEvents_Release(advise_events);
1929 LONG lbound, elems,
i;
1936 for (
i = 0;
i < elems;
i++)
1938 IRawElementProviderSimple *elprov;
1947 hr = IUnknown_QueryInterface(unk, &IID_IRawElementProviderSimple, (
void **)&elprov);
1948 IUnknown_Release(unk);
1953 IRawElementProviderSimple_Release(elprov);
1960 WARN(
"attach_event_to_uia_node failed with hr %#lx\n",
hr);
1969 IRawElementProviderFragmentRoot_Release(elroot);
1970 IRawElementProviderFragment_Release(elfrag);
1977 LONG child_id, IProxyProviderWinEventSink *
sink)
1980 IProxyProviderWinEventHandler *
handler;
1983 hr = IRawElementProviderSimple_QueryInterface(prov->
elprov, &IID_IProxyProviderWinEventHandler, (
void **)&
handler);
1988 IProxyProviderWinEventHandler_Release(
handler);
1996 IRawElementProviderSimple *
elprov;
1999 TRACE(
"%p, %#lx, %p\n", iface,
flags, ret_val);
2002 FIXME(
"PROV_METHOD_FLAG_RETURN_NODE_LRES ignored for normal providers.\n");
2005 hr = IRawElementProviderSimple_QueryInterface(prov->
elprov, &IID_IRawElementProviderSimple, (
void **)&
elprov);
2040 if (!
node->prov_count)
2041 node->creator_prov_type = prov_type;
2044 IRawElementProviderSimple_AddRef(
elprov);
2050 BOOL get_hwnd_providers,
int node_flags)
2061 hr = IRawElementProviderSimple_get_ProviderOptions(elprov, &prov_opts);
2065 if (prov_opts & unsupported_prov_opts)
2066 FIXME(
"Ignoring unsupported ProviderOption(s) %#x\n", prov_opts & unsupported_prov_opts);
2092 if (
node->hwnd && get_hwnd_providers)
2096 WARN(
"uia_get_providers_for_hwnd failed with hr %#lx\n",
hr);
2102 IWineUiaNode_Release(&
node->IWineUiaNode_iface);
2106 *out_node = (
void *)&
node->IWineUiaNode_iface;
2116 TRACE(
"(%p, %p)\n", elprov, huianode);
2118 if (!elprov || !huianode)
2146 0, 0, { (
DWORD_PTR)(__FILE__
": client_thread_cs") }
2150#define WM_UIA_CLIENT_GET_NODE_PROV (WM_USER + 1)
2151#define WM_UIA_CLIENT_THREAD_STOP (WM_USER + 2)
2177 hwnd =
CreateWindowW(
L"Message",
NULL, 0, 0, 0, 0, 0,
HWND_MESSAGE,
NULL,
NULL,
NULL);
2189 TRACE(
"Client thread started.\n");
2198 TRACE(
"Shutting down UI Automation client thread.\n");
2236 ready_event, 0,
NULL)))
2256 WARN(
"Failed to start client thread\n");
2307 IWineUiaProvider_AddRef(iface);
2316 TRACE(
"%p, refcount %ld\n", prov,
ref);
2325 TRACE(
"%p, refcount %ld\n", prov,
ref);
2343 TRACE(
"%p, %p, %p\n", iface, prop_info, ret_val);
2346 if (prop_info->
type == UIAutomationType_ElementArray)
2348 FIXME(
"Element array property types currently unsupported for nested nodes.\n");
2356 switch (prop_info->
type)
2358 case UIAutomationType_Element:
2383 TRACE(
"%p, %p\n", iface, out_opts);
2392 TRACE(
"%p, %p\n", iface, out_val);
2404 TRACE(
"%p, %d, %p\n", iface, nav_dir, out_val);
2428 TRACE(
"%p, %#lx, %p\n", iface,
flags, out_val);
2455 IWineUiaEvent *remote_event =
NULL;
2458 TRACE(
"%p, %#Ix\n", iface, huiaevent);
2465 IWineUiaEvent_Release(remote_event);
2471 LONG obj_id,
LONG child_id, IProxyProviderWinEventSink *
sink)
2473 FIXME(
"%p, %#lx, #%lx, %#lx, %#lx, %p: stub\n", iface, win_event,
hwnd, obj_id, child_id,
sink);
2486 TRACE(
"%p, %#lx, %p\n", iface,
flags, ret_val);
2534 IWineUiaProvider *provider_iface =
NULL;
2537 int prov_opts, prov_type;
2551 WARN(
"Failed to get provider options for node %p with hr %#lx\n",
nested_node,
hr);
2563 if (
node->prov[prov_type])
2565 TRACE(
"Already have a provider of type %d for this node.\n", prov_type);
2583 ERR(
"Failed to get uia_node structure from nested node\n");
2591 IWineUiaProvider_AddRef(provider_iface);
2597 IWineUiaNode_Release(nested_node);
2602 prov =
calloc(1,
sizeof(*prov));
2616 &IID_IWineUiaProvider, &git_cookie);
2627 hr = IWineUiaNode_get_hwnd(nested_node, &
hwnd);
2633 node->prov[prov_type] = provider_iface;
2634 node->git_cookie[prov_type] = git_cookie;
2635 if (!
node->prov_count)
2636 node->creator_prov_type = prov_type;
2668 WARN(
"uia_get_providers_for_hwnd failed with hr %#lx\n",
hr);
2674 IWineUiaNode_Release(&
node->IWineUiaNode_iface);
2678 *huianode = (
void *)&
node->IWineUiaNode_iface;
2688 IWineUiaNode_Release(
node);
2749 IWineUiaNode_Release(&
node->IWineUiaNode_iface);
2753 *out_node = (
void *)&
node->IWineUiaNode_iface;
2773 TRACE(
"(%p)\n", huianode);
2804 for (
i = 0;
i <
node->prov_count;
i++)
2811 if (!desktop_node && ((
i ==
node->creator_prov_idx) ||
2836 HUIANODE
node, node2;
2839 TRACE(
"(%p, %p, %p)\n", cache_req, out_req, tree_struct);
2841 if (!cache_req || !out_req || !tree_struct)
2845 *tree_struct =
NULL;
2866 WARN(
"UiaGetUpdatedCache failed with hr %#lx\n",
hr);
2880 TRACE(
"(%p)\n", huianode);
2885 IWineUiaNode_Release(&
node->IWineUiaNode_iface);
2896 for (
i = 0;
i <
node->prov_count;
i++)
2918 if (!
node || !out_val)
2928 if (!prop_info->
type)
2936 case UIA_RuntimeIdPropertyId:
2949 case UIA_ProviderDescriptionPropertyId:
2967 if (prop_info->
type == UIAutomationType_ElementArray)
3018 for (
i = 0;
i < (elems - 1);
i++)
3020 idx = (lbound + 1) +
i;
3051 TRACE(
"(%p, %p)\n", huianode, runtime_id);
3053 if (!
node || !runtime_id)
3101 TRACE(
"(%p, %p)\n", in_val, huianode);
3103 if (!in_val || !huianode)
3109 WARN(
"Invalid vt %d\n",
V_VT(in_val));
3117 *huianode = (HUIANODE)
V_UNKNOWN(in_val);
3122 *huianode = (HUIANODE)
V_I8(in_val);
3124 *huianode = (HUIANODE)
V_I4(in_val);
3137 IRawElementProviderSimple *elprov =
NULL;
3138 static BOOL fixme_once;
3154 WARN(
"Failed to create MSAA proxy provider with hr %#lx\n",
hr);
3156 IAccessible_Release(acc);
3162 FIXME(
"Default ProviderType_NonClientArea provider unimplemented.\n");
3168 WARN(
"create_base_hwnd_provider failed with hr %#lx\n",
hr);
3183 IRawElementProviderSimple_Release(elprov);
3194 IRawElementProviderSimple *elprov;
3201 if (
node->ignore_clientside_hwnd_provs)
3218 WARN(
"Invalid element count %ld for returned SAFEARRAY\n", elems);
3226 hr = IUnknown_QueryInterface(unk, &IID_IRawElementProviderSimple, (
void **)&elprov);
3227 IUnknown_Release(unk);
3230 WARN(
"Failed to get IRawElementProviderSimple from returned SAFEARRAY.\n");
3236 IRawElementProviderSimple_Release(elprov);
3240 WARN(
"Failed to get clientside provider, hr %#lx\n",
hr);
3247 static BOOL fixme_once;
3262 FIXME(
"Override provider callback currently unimplemented.\n");
3278 if (!
node->prov_count)
3319 switch (prop_info->
type)
3321 case UIAutomationType_Bool:
3322 case UIAutomationType_IntArray:
3326 FIXME(
"PropertyCondition comparison unimplemented for type %#x\n", prop_info->
type);
3336 switch (prop_info->
type)
3338 case UIAutomationType_Bool:
3345 case UIAutomationType_IntArray:
3417 WARN(
"Invalid condition type %d\n",
condition->ConditionType);
3427 *normalized_node =
NULL;
3442 *normalized_node = huianode;
3443 IWineUiaNode_AddRef(&
node->IWineUiaNode_iface);
3463 TRACE(
"(%p, %p, %u, %p, %p, %p)\n", huianode, cache_req, normalize_state, normalize_cond, out_req, tree_struct);
3465 if (!
node || !out_req || !tree_struct || !cache_req)
3468 *tree_struct =
NULL;
3473 FIXME(
"Unsupported cache request scope %#x\n", cache_req->
Scope);
3478 FIXME(
"Pattern caching currently unimplemented\n");
3489 switch (normalize_state)
3500 cond = normalize_cond;
3504 WARN(
"Invalid normalize_state %d\n", normalize_state);
3523 WARN(
"Failed to create safearray\n");
3571 HUIANODE node2 =
NULL;
3574 TRACE(
"(%p, %u, %p, %p, %p, %p)\n", huianode,
dir, nav_condition, cache_req, out_req,
3577 if (!
node || !nav_condition || !cache_req || !out_req || !tree_struct)
3581 *tree_struct =
NULL;
3588 WARN(
"UiaGetUpdatedCache failed with hr %#lx\n",
hr);
3598 LONG idx[2], lbound[2], elems[2], cur_offset;
3603 for (
i = cur_offset = 0;
i < reqs_count;
i++)
3608 for (
x = 0;
x < 2;
x++)
3615 for (
x = 0;
x < elems[0];
x++)
3617 for (
y = 0;
y < elems[1];
y++)
3619 idx[0] =
x + lbound[0];
3620 idx[1] =
y + lbound[1];
3625 idx[0] =
x + cur_offset;
3633 cur_offset += elems[0];
3650 LONG idx, lbound, elems, cur_offset;
3652 int i, cur_depth = 0;
3657 TRACE(
"(%p, %p, %p, %p, %p, %p)\n", huianode, find_params, cache_req, out_req, out_offsets, out_tree_structs);
3659 if (!
node || !find_params || !cache_req || !out_req || !out_offsets || !out_tree_structs)
3662 *out_tree_structs = *out_offsets = *out_req = tree_structs =
offsets = req =
NULL;
3684 IWineUiaNode_AddRef(&
node->IWineUiaNode_iface);
3687 find_params->
MaxDepth, &cur_depth, &nodes);
3737 cur_offset += elems;
3762 *out_tree_structs = tree_structs;
3792 FIXME(
"(%p, %p): stub\n", huiaevent,
hwnd);
static struct sockaddr_in sa
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static int list_empty(struct list_entry *head)
static void list_init(struct list_entry *head)
#define UlongToHandle(ul)
HRESULT WINAPI CoIncrementMTAUsage(CO_MTA_USAGE_COOKIE *cookie)
HRESULT WINAPI CoDecrementMTAUsage(CO_MTA_USAGE_COOKIE cookie)
BOOL WINAPI GetModuleHandleExW(IN DWORD dwFlags, IN LPCWSTR lpwModuleName OPTIONAL, OUT HMODULE *phModule)
VOID WINAPI FreeLibraryAndExitThread(HMODULE hLibModule, DWORD dwExitCode)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
UINT(* handler)(MSIPACKAGE *)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
HRESULT WINAPI AccessibleObjectFromWindow(HWND hwnd, DWORD dwObjectID, REFIID riid, void **ppvObject)
HRESULT WINAPI ObjectFromLresult(LRESULT result, REFIID riid, WPARAM wParam, void **ppObject)
HRESULT WINAPI SafeArrayGetUBound(SAFEARRAY *psa, UINT nDim, LONG *plUbound)
HRESULT WINAPI SafeArrayGetElement(SAFEARRAY *psa, LONG *rgIndices, void *pvData)
SAFEARRAY *WINAPI SafeArrayCreateVector(VARTYPE vt, LONG lLbound, ULONG cElements)
HRESULT WINAPI SafeArrayGetLBound(SAFEARRAY *psa, UINT nDim, LONG *plLbound)
HRESULT WINAPI SafeArrayDestroy(SAFEARRAY *psa)
SAFEARRAY *WINAPI SafeArrayCreate(VARTYPE vt, UINT cDims, SAFEARRAYBOUND *rgsabound)
HRESULT WINAPI SafeArrayGetVartype(SAFEARRAY *psa, VARTYPE *pvt)
HRESULT WINAPI SafeArrayPutElement(SAFEARRAY *psa, LONG *rgIndices, void *pvData)
static const FxOffsetAndName offsets[]
GLint GLint GLsizei GLsizei GLsizei depth
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizei GLenum GLboolean sink
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
static IPrintDialogCallback callback
BSTR WINAPI SysAllocString(LPCOLESTR str)
UINT WINAPI SysStringLen(BSTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
int WINAPI SysReAllocStringLen(BSTR *old, const OLECHAR *str, unsigned int len)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
#define IsEqualIID(riid1, riid2)
struct UiaCondition ** ppConditions
struct UiaCondition * pViewCondition
enum ConditionType ConditionType
struct UiaCondition * pFindCondition
struct UiaCondition * pConditions
LIST_ENTRY ProcessLocksList
CO_MTA_USAGE_COOKIE mta_cookie
IWineUiaProvider IWineUiaProvider_iface
IWineUiaNode * nested_node
IWineUiaProvider * prov[PROV_TYPE_COUNT]
DWORD git_cookie[PROV_TYPE_COUNT]
IWineUiaNode IWineUiaNode_iface
IRawElementProviderSimple * elprov
BOOL refuse_hwnd_node_providers
IWineUiaProvider IWineUiaProvider_iface
DWORD WINAPI WaitForMultipleObjects(IN DWORD nCount, IN CONST HANDLE *lpHandles, IN BOOL bWaitAll, IN DWORD dwMilliseconds)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define CONTAINING_RECORD(address, type, field)
static HRESULT uia_node_normalize(HUIANODE huianode, struct UiaCondition *cond, HUIANODE *normalized_node)
static UiaProviderCallback * uia_provider_callback
static HRESULT WINAPI uia_nested_node_provider_get_prop_val(IWineUiaProvider *iface, const struct uia_prop_info *prop_info, VARIANT *ret_val)
static HRESULT get_prop_val_from_node(struct uia_node *node, const struct uia_prop_info *prop_info, VARIANT *v)
static HRESULT create_wine_uia_nested_node_provider(struct uia_node *node, LRESULT lr, BOOL unwrap)
static HRESULT get_navigate_from_node_provider(IWineUiaNode *node, int idx, int nav_dir, VARIANT *ret_val)
static BOOL node_creator_is_parent_link(struct uia_node *node)
static ULONG WINAPI uia_nested_node_provider_Release(IWineUiaProvider *iface)
static BOOL is_nested_node_provider(IWineUiaProvider *iface)
static const IWineUiaProviderVtbl uia_provider_vtbl
static HWND get_hwnd_from_provider(IRawElementProviderSimple *elprov)
int get_node_provider_type_at_idx(struct uia_node *node, int idx)
HRESULT uia_condition_check(HUIANODE node, struct UiaCondition *condition)
static const IWineUiaNodeVtbl uia_node_vtbl
HRESULT WINAPI UiaGetRuntimeId(HUIANODE huianode, SAFEARRAY **runtime_id)
HRESULT WINAPI UiaNodeFromProvider(IRawElementProviderSimple *elprov, HUIANODE *huianode)
HRESULT WINAPI UiaGetUpdatedCache(HUIANODE huianode, struct UiaCacheRequest *cache_req, enum NormalizeState normalize_state, struct UiaCondition *normalize_cond, SAFEARRAY **out_req, BSTR *tree_struct)
HRESULT WINAPI UiaFind(HUIANODE huianode, struct UiaFindParams *find_params, struct UiaCacheRequest *cache_req, SAFEARRAY **out_req, SAFEARRAY **out_offsets, SAFEARRAY **out_tree_structs)
static HRESULT WINAPI uia_provider_get_focus(IWineUiaProvider *iface, LONG flags, VARIANT *out_val)
static void uia_stop_client_thread(void)
static struct uia_client_thread client_thread
static HRESULT WINAPI uia_provider_QueryInterface(IWineUiaProvider *iface, REFIID riid, void **ppv)
static HRESULT WINAPI uia_nested_node_provider_create_node_from_prov(IWineUiaProvider *iface, LONG flags, VARIANT *ret_val)
static HRESULT get_sibling_from_node_provider(struct uia_node *node, int prov_idx, int nav_dir, VARIANT *out_node)
static IRawElementProviderSimple * get_provider_hwnd_fragment_root(IRawElementProviderSimple *elprov, HWND *hwnd)
static HRESULT conditional_navigate_uia_node(struct uia_node *node, int nav_dir, struct UiaCondition *cond, HUIANODE *out_node)
static HRESULT get_node_provider_description_string(struct uia_node *node, VARIANT *out_desc)
fragment_root_prov_type_ids
@ FRAGMENT_ROOT_NONCLIENT_TYPE_ID
@ FRAGMENT_ROOT_OVERRIDE_TYPE_ID
@ FRAGMENT_ROOT_MAIN_TYPE_ID
static HRESULT bstrcat_realloc(BSTR *bstr, const WCHAR *cat_str)
static void clear_uia_node_ptr_safearray(SAFEARRAY *sa, LONG elems)
static HRESULT get_has_parent_from_node_provider(IWineUiaNode *node, int idx, BOOL *out_val)
HRESULT WINAPI UiaNodeFromFocus(struct UiaCacheRequest *cache_req, SAFEARRAY **out_req, BSTR *tree_struct)
static const WCHAR * prov_desc_type_str[]
static HRESULT WINAPI uia_nested_node_provider_navigate(IWineUiaProvider *iface, int nav_dir, VARIANT *out_val)
HRESULT WINAPI UiaGetPropertyValue(HUIANODE huianode, PROPERTYID prop_id, VARIANT *out_val)
static const struct UiaCondition UiaFalseCondition
static const IWineUiaProviderVtbl uia_nested_node_provider_vtbl
static HRESULT uia_get_provider_from_hwnd(struct uia_node *node)
static HRESULT get_prop_val_from_node_provider(IWineUiaNode *node, const struct uia_prop_info *prop_info, int idx, VARIANT *out_val)
BOOL WINAPI UiaNodeRelease(HUIANODE huianode)
static HRESULT WINAPI uia_nested_node_provider_respond_to_win_event(IWineUiaProvider *iface, DWORD win_event, ULONG hwnd, LONG obj_id, LONG child_id, IProxyProviderWinEventSink *sink)
static CRITICAL_SECTION_DEBUG client_thread_cs_debug
static HRESULT WINAPI uia_nested_node_provider_QueryInterface(IWineUiaProvider *iface, REFIID riid, void **ppv)
static HRESULT WINAPI uia_nested_node_provider_attach_event(IWineUiaProvider *iface, LONG_PTR huiaevent)
static HRESULT uia_provider_get_pattern_prop_val(struct uia_provider *prov, const struct uia_prop_info *prop_info, VARIANT *ret_val)
HRESULT WINAPI UiaNavigate(HUIANODE huianode, enum NavigateDirection dir, struct UiaCondition *nav_condition, struct UiaCacheRequest *cache_req, SAFEARRAY **out_req, BSTR *tree_struct)
static HRESULT WINAPI uia_node_get_prop_val(IWineUiaNode *iface, const GUID *prop_guid, VARIANT *ret_val)
static ULONG WINAPI uia_node_AddRef(IWineUiaNode *iface)
HRESULT attach_event_to_uia_node(HUIANODE node, struct uia_event *event)
HRESULT WINAPI UiaGetRootNode(HUIANODE *huianode)
static HRESULT WINAPI uia_node_QueryInterface(IWineUiaNode *iface, REFIID riid, void **ppv)
HRESULT respond_to_win_event_on_node_provider(IWineUiaNode *node, int idx, DWORD win_event, HWND hwnd, LONG obj_id, LONG child_id, IProxyProviderWinEventSink *sink)
static HRESULT uia_cache_request_combine(SAFEARRAY **reqs, int reqs_count, SAFEARRAY *out_req)
static ULONG WINAPI uia_nested_node_provider_AddRef(IWineUiaProvider *iface)
static HRESULT add_node_to_node_array(struct uia_node_array *out_nodes, HUIANODE node)
static DWORD WINAPI uia_client_thread_proc(void *arg)
HRESULT clone_uia_node(HUIANODE in_node, HUIANODE *out_node)
static void create_uia_node_safearray(VARIANT *in, VARIANT *out)
HRESULT WINAPI UiaEventRemoveWindow(HUIAEVENT huiaevent, HWND hwnd)
static HRESULT WINAPI uia_provider_create_node_from_prov(IWineUiaProvider *iface, LONG flags, VARIANT *ret_val)
static HRESULT create_uia_node(struct uia_node **out_node, int node_flags)
HRESULT create_uia_node_from_hwnd(HWND hwnd, HUIANODE *out_node, int node_flags)
HRESULT WINAPI UiaHUiaNodeFromVariant(VARIANT *in_val, HUIANODE *huianode)
static SAFEARRAY * append_uia_runtime_id(SAFEARRAY *sa, HWND hwnd, enum ProviderOptions root_opts)
static ULONG WINAPI uia_provider_AddRef(IWineUiaProvider *iface)
static HRESULT traverse_uia_node_tree_siblings(HUIANODE huianode, struct UiaCondition *ascending_stop_cond, int dir, BOOL at_root_level, HUIANODE *out_node)
static HRESULT WINAPI uia_node_disconnect(IWineUiaNode *iface)
#define WM_UIA_CLIENT_THREAD_STOP
static HRESULT attach_event_to_node_provider(IWineUiaNode *node, int idx, HUIAEVENT huiaevent)
static HRESULT WINAPI uia_provider_attach_event(IWineUiaProvider *iface, LONG_PTR huiaevent)
static HRESULT uia_provider_get_special_prop_val(struct uia_provider *prov, const struct uia_prop_info *prop_info, VARIANT *ret_val)
static HRESULT uia_property_condition_check(HUIANODE node, struct UiaPropertyCondition *prop_cond)
static HRESULT WINAPI uia_node_attach_event(IWineUiaNode *iface, LONG proc_id, LONG event_cookie, IWineUiaEvent **ret_event)
static HRESULT WINAPI uia_provider_navigate(IWineUiaProvider *iface, int nav_dir, VARIANT *out_val)
static HRESULT WINAPI uia_nested_node_provider_get_focus(IWineUiaProvider *iface, LONG flags, VARIANT *out_val)
static HRESULT create_wine_uia_provider(struct uia_node *node, IRawElementProviderSimple *elprov, int prov_type)
static ULONG WINAPI uia_provider_Release(IWineUiaProvider *iface)
static SAFEARRAY WINAPI * default_uia_provider_callback(HWND hwnd, enum ProviderType prov_type)
static HRESULT WINAPI uia_nested_node_provider_has_parent(IWineUiaProvider *iface, BOOL *out_val)
void WINAPI UiaRegisterProviderCallback(UiaProviderCallback *callback)
static HRESULT WINAPI uia_node_get_hwnd(IWineUiaNode *iface, ULONG *out_hwnd)
HRESULT navigate_uia_node(struct uia_node *node, int nav_dir, HUIANODE *out_node)
static HRESULT WINAPI uia_provider_respond_to_win_event(IWineUiaProvider *iface, DWORD win_event, ULONG hwnd, LONG obj_id, LONG child_id, IProxyProviderWinEventSink *sink)
static struct uia_node * unsafe_impl_from_IWineUiaNode(IWineUiaNode *iface)
HRESULT WINAPI UiaNodeFromHandle(HWND hwnd, HUIANODE *huianode)
static HRESULT get_variant_for_elprov_node(IRawElementProviderSimple *elprov, BOOL out_nested, BOOL refuse_hwnd_providers, VARIANT *v)
static HRESULT uia_get_providers_for_hwnd(struct uia_node *node)
HRESULT uia_node_from_lresult(LRESULT lr, HUIANODE *huianode, int node_flags)
static HRESULT WINAPI uia_provider_get_prov_opts(IWineUiaProvider *iface, int *out_opts)
static HRESULT get_focused_uia_node(HUIANODE in_node, HUIANODE *out_node)
static HRESULT WINAPI uia_nested_node_provider_get_prov_opts(IWineUiaProvider *iface, int *out_opts)
static HRESULT uia_provider_get_elem_prop_val(struct uia_provider *prov, const struct uia_prop_info *prop_info, VARIANT *ret_val)
HRESULT create_node_from_node_provider(IWineUiaNode *node, int idx, LONG flags, VARIANT *ret_val)
static struct uia_nested_node_provider * impl_from_nested_node_IWineUiaProvider(IWineUiaProvider *iface)
static HRESULT get_prov_opts_from_node_provider(IWineUiaNode *node, int idx, int *out_opts)
static void clear_node_array(struct uia_node_array *nodes)
static HRESULT WINAPI uia_provider_has_parent(IWineUiaProvider *iface, BOOL *out_val)
static HRESULT get_child_for_node(struct uia_node *node, int start_prov_idx, int nav_dir, VARIANT *out_node)
void uia_node_lresult_release(LRESULT lr)
HRESULT create_uia_node_from_elprov(IRawElementProviderSimple *elprov, HUIANODE *out_node, BOOL get_hwnd_providers, int node_flags)
static HRESULT prepare_uia_node(struct uia_node *node)
static HRESULT WINAPI uia_node_get_provider(IWineUiaNode *iface, int idx, IWineUiaProvider **out_prov)
static HRESULT traverse_uia_node_tree(HUIANODE huianode, struct UiaCondition *view_cond, struct UiaCondition *search_cond, struct UiaCondition *pre_sibling_nav_stop_cond, struct UiaCondition *ascending_stop_cond, int traversal_opts, BOOL at_root_level, BOOL find_first, BOOL *root_found, int max_depth, int *cur_depth, struct uia_node_array *out_nodes)
static HRESULT uia_get_clientside_provider(struct uia_node *node, int prov_type, int node_prov_type)
static BOOL uia_start_client_thread(void)
static void uia_node_ptr_to_unk_safearray(VARIANT *in)
static LRESULT CALLBACK uia_client_thread_msg_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
#define WM_UIA_CLIENT_GET_NODE_PROV
static CRITICAL_SECTION client_thread_cs
static ULONG WINAPI uia_node_Release(IWineUiaNode *iface)
HRESULT get_focus_from_node_provider(IWineUiaNode *node, int idx, LONG flags, VARIANT *ret_val)
static HRESULT WINAPI uia_provider_get_prop_val(IWineUiaProvider *iface, const struct uia_prop_info *prop_info, VARIANT *ret_val)
BOOL uia_condition_matched(HRESULT hr)
BOOL WINAPI UiaHasServerSideProvider(HWND hwnd)
HRESULT uia_event_add_provider_event_adviser(IRawElementProviderAdviseEvents *advise_events, struct uia_event *event)
HRESULT create_serverside_uia_event(struct uia_event **out_event, LONG process_id, LONG event_cookie)
HRESULT uia_event_add_win_event_hwnd(struct uia_event *event, HWND hwnd)
HRESULT uia_event_add_serverside_event_adviser(IWineUiaEvent *serverside_event, struct uia_event *event)
int WINAPI UiaLookupId(enum AutomationIdentifierType type, const GUID *guid)
const struct uia_pattern_info * uia_pattern_info_from_id(PATTERNID pattern_id)
const struct uia_prop_info * uia_prop_info_from_id(PROPERTYID prop_id)
HRESULT WINAPI UiaGetReservedNotSupportedValue(IUnknown **value)
static struct uia_provider * impl_from_IWineUiaProvider(IWineUiaProvider *iface)
HRESULT register_interface_in_git(IUnknown *iface, REFIID riid, DWORD *ret_cookie)
HRESULT create_msaa_provider(IAccessible *acc, LONG child_id, HWND hwnd, BOOL root_acc_known, BOOL is_root_acc, IRawElementProviderSimple **elprov)
HRESULT get_interface_in_git(REFIID riid, DWORD git_cookie, IUnknown **ret_iface)
static void get_variant_for_node(HUIANODE node, VARIANT *v)
@ NODE_FLAG_IGNORE_CLIENTSIDE_HWND_PROVS
@ NODE_FLAG_IGNORE_COM_THREADING
void uia_stop_provider_thread(void)
LRESULT uia_lresult_from_node(HUIANODE huianode)
HRESULT get_safearray_bounds(SAFEARRAY *sa, LONG *lbound, LONG *elems)
HRESULT write_runtime_id_base(SAFEARRAY *sa, HWND hwnd)
void uia_provider_thread_remove_node(HUIANODE node)
static struct uia_node * impl_from_IWineUiaNode(IWineUiaNode *iface)
static void variant_init_bool(VARIANT *v, BOOL val)
HRESULT unregister_interface_in_git(DWORD git_cookie)
HRESULT get_safearray_dim_bounds(SAFEARRAY *sa, UINT dim, LONG *lbound, LONG *elems)
HRESULT create_base_hwnd_provider(HWND hwnd, IRawElementProviderSimple **elprov)
@ PROV_METHOD_FLAG_RETURN_NODE_LRES
static void variant_init_i4(VARIANT *v, int val)
int uia_compare_safearrays(SAFEARRAY *sa1, SAFEARRAY *sa2, int prop_type)
static BOOL uia_array_reserve(void **elements, SIZE_T *capacity, SIZE_T count, SIZE_T size)
@ TreeTraversalOptions_LastToFirstOrder
@ TreeTraversalOptions_Default
@ ProviderOptions_ProviderOwnsSetFocus
@ ProviderOptions_ClientSideProvider
@ ProviderOptions_NonClientAreaProvider
@ ProviderOptions_UseClientCoordinates
@ ProviderOptions_OverrideProvider
@ ProviderOptions_HasNativeIAccessible
@ ProviderOptions_ServerSideProvider
@ ProviderOptions_UseComThreading
@ NavigateDirection_NextSibling
@ NavigateDirection_PreviousSibling
@ NavigateDirection_Parent
@ NavigateDirection_LastChild
@ NavigateDirection_FirstChild
#define UIA_E_ELEMENTNOTAVAILABLE
@ ProviderType_NonClientArea
SAFEARRAY *WINAPI UiaProviderCallback(HWND hwnd, enum ProviderType providerType)
#define UiaAppendRuntimeId
@ AutomationIdentifierType_Property
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
void WINAPI VariantInit(VARIANTARG *pVarg)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
DWORD WINAPI GetLastError(void)
DWORD WINAPI GetCurrentThreadId(void)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
DWORD WINAPI GetCurrentProcessId(void)
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define ERROR_INVALID_WINDOW_HANDLE
BOOL WINAPI IsWindow(_In_opt_ HWND)
BOOL WINAPI TranslateMessage(_In_ const MSG *)
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
HWND WINAPI GetDesktopWindow(void)
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
#define SetWindowLongPtrW
BOOL WINAPI DestroyWindow(_In_ HWND)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)