24#include "wine/iaccessible2.h"
28DEFINE_GUID(SID_AccFromDAWrapper, 0x33f139ee, 0xe509, 0x47f7, 0xbf,0x39, 0x83,0x76,0x44,0xf7,0x45,0x76);
37 hr = IAccessible_get_accState(acc,
cid, &
v);
55 hr = IAccessible_QueryInterface(acc, &IID_IServiceProvider, (
void **)&
sp);
59 hr = IServiceProvider_QueryService(
sp,
sid,
riid, (
void **)service);
60 IServiceProvider_Release(
sp);
73 hr = IAccessible_QueryInterface(acc, &IID_IAccessible2, (
void **)&ia2);
89 IAccessible_AddRef(acc);
101 IUnknown_Release(unk);
115 BOOL role_match, state_match, child_count_match, location_match;
120 role_match = state_match = child_count_match = location_match =
FALSE;
122 hr = IAccessible_get_accRole(acc,
cid, &
v);
126 hr = IAccessible_get_accRole(acc2,
cid, &
v2);
137 hr = IAccessible_get_accState(acc,
cid, &
v);
141 hr = IAccessible_get_accState(acc2,
cid, &
v2);
151 hr = IAccessible_get_accChildCount(acc, &child_count[0]);
152 hr2 = IAccessible_get_accChildCount(acc2, &child_count[1]);
155 if (child_count[0] != child_count[1])
158 child_count_match =
TRUE;
171 location_match =
TRUE;
175 if (role_match && state_match && child_count_match && location_match)
188 IAccessible_QueryInterface(acc, &
IID_IUnknown, (
void**)&unk);
189 IAccessible_QueryInterface(acc2, &
IID_IUnknown, (
void**)&unk2);
192 IAccessible_Release(acc);
193 IUnknown_Release(unk);
194 IAccessible_Release(acc2);
195 IUnknown_Release(unk2);
212 IAccessible_QueryInterface(acc, &
IID_IUnknown, (
void**)&unk);
213 IAccessible_QueryInterface(acc2, &
IID_IUnknown, (
void**)&unk2);
222 if (!ia2[0] != !ia2[1])
226 hr = IAccessible2_get_uniqueID(ia2[0], &unique_id[0]);
229 hr = IAccessible2_get_uniqueID(ia2[1], &unique_id[1]);
232 if (unique_id[0] == unique_id[1])
247 hr = IAccessible_get_accName(acc,
cid, &
name[0]);
250 hr = IAccessible_get_accName(acc2,
cid, &
name[1]);
272 IUnknown_Release(unk);
273 IUnknown_Release(unk2);
274 IAccessible_Release(acc);
275 IAccessible_Release(acc2);
277 IAccessible2_Release(ia2[0]);
279 IAccessible2_Release(ia2[1]);
290 hr = IAccessible_get_accParent(acc, &disp);
294 hr = IDispatch_QueryInterface(disp, &IID_IAccessible, (
void**)
parent);
295 IDispatch_Release(disp);
304 LONG child_count, cur_pos;
314 hr = IAccessible_get_accChildCount(acc, &child_count);
315 if (
FAILED(
hr) || (cur_pos > child_count))
319 hr = IAccessible_get_accChild(acc,
cid, &disp);
328 *child_id = *child_pos = cur_pos;
329 IAccessible_AddRef(acc);
337 hr = IDispatch_QueryInterface(disp, &IID_IAccessible, (
void **)&acc_child);
338 IDispatch_Release(disp);
347 *child_pos = cur_pos;
351 IAccessible_Release(acc_child);
359 if ((cur_pos > child_count) || (cur_pos <= 0))
369 LONG child_count, child_id, child_pos, match_pos;
380 hr = IAccessible_get_accChildCount(
parent, &child_count);
383 IAccessible_Release(
parent);
387 children =
calloc(child_count,
sizeof(*children));
392 for (
i = 0;
i < child_count;
i++)
401 IAccessible_Release(
child);
404 for (
i = 0;
i < child_count;
i++)
430 *out_child_pos = match_pos;
433 IAccessible_Release(
parent);
435 for (
i = 0;
i < child_count;
i++)
438 IAccessible_Release(children[
i]);
450 case ROLE_SYSTEM_TITLEBAR:
return UIA_TitleBarControlTypeId;
451 case ROLE_SYSTEM_MENUBAR:
return UIA_MenuBarControlTypeId;
452 case ROLE_SYSTEM_SCROLLBAR:
return UIA_ScrollBarControlTypeId;
453 case ROLE_SYSTEM_INDICATOR:
454 case ROLE_SYSTEM_GRIP:
return UIA_ThumbControlTypeId;
455 case ROLE_SYSTEM_APPLICATION:
456 case ROLE_SYSTEM_WINDOW:
return UIA_WindowControlTypeId;
457 case ROLE_SYSTEM_MENUPOPUP:
return UIA_MenuControlTypeId;
458 case ROLE_SYSTEM_TOOLTIP:
return UIA_ToolTipControlTypeId;
459 case ROLE_SYSTEM_DOCUMENT:
return UIA_DocumentControlTypeId;
460 case ROLE_SYSTEM_PANE:
return UIA_PaneControlTypeId;
461 case ROLE_SYSTEM_GROUPING:
return UIA_GroupControlTypeId;
462 case ROLE_SYSTEM_SEPARATOR:
return UIA_SeparatorControlTypeId;
463 case ROLE_SYSTEM_TOOLBAR:
return UIA_ToolBarControlTypeId;
464 case ROLE_SYSTEM_STATUSBAR:
return UIA_StatusBarControlTypeId;
465 case ROLE_SYSTEM_TABLE:
return UIA_TableControlTypeId;
466 case ROLE_SYSTEM_COLUMNHEADER:
467 case ROLE_SYSTEM_ROWHEADER:
return UIA_HeaderControlTypeId;
468 case ROLE_SYSTEM_CELL:
return UIA_DataItemControlTypeId;
469 case ROLE_SYSTEM_LINK:
return UIA_HyperlinkControlTypeId;
470 case ROLE_SYSTEM_LIST:
return UIA_ListControlTypeId;
471 case ROLE_SYSTEM_LISTITEM:
return UIA_ListItemControlTypeId;
472 case ROLE_SYSTEM_OUTLINE:
return UIA_TreeControlTypeId;
473 case ROLE_SYSTEM_OUTLINEITEM:
return UIA_TreeItemControlTypeId;
474 case ROLE_SYSTEM_PAGETAB:
return UIA_TabItemControlTypeId;
475 case ROLE_SYSTEM_GRAPHIC:
return UIA_ImageControlTypeId;
476 case ROLE_SYSTEM_STATICTEXT:
return UIA_TextControlTypeId;
477 case ROLE_SYSTEM_TEXT:
return UIA_EditControlTypeId;
478 case ROLE_SYSTEM_CLOCK:
479 case ROLE_SYSTEM_BUTTONDROPDOWNGRID:
480 case ROLE_SYSTEM_PUSHBUTTON:
return UIA_ButtonControlTypeId;
481 case ROLE_SYSTEM_CHECKBUTTON:
return UIA_CheckBoxControlTypeId;
482 case ROLE_SYSTEM_RADIOBUTTON:
return UIA_RadioButtonControlTypeId;
483 case ROLE_SYSTEM_COMBOBOX:
return UIA_ComboBoxControlTypeId;
484 case ROLE_SYSTEM_PROGRESSBAR:
return UIA_ProgressBarControlTypeId;
485 case ROLE_SYSTEM_SLIDER:
return UIA_SliderControlTypeId;
486 case ROLE_SYSTEM_SPINBUTTON:
return UIA_SpinnerControlTypeId;
487 case ROLE_SYSTEM_BUTTONMENU:
488 case ROLE_SYSTEM_MENUITEM:
return UIA_MenuItemControlTypeId;
489 case ROLE_SYSTEM_PAGETABLIST:
return UIA_TabControlTypeId;
490 case ROLE_SYSTEM_BUTTONDROPDOWN:
491 case ROLE_SYSTEM_SPLITBUTTON:
return UIA_SplitButtonControlTypeId;
492 case ROLE_SYSTEM_SOUND:
493 case ROLE_SYSTEM_CURSOR:
494 case ROLE_SYSTEM_CARET:
495 case ROLE_SYSTEM_ALERT:
496 case ROLE_SYSTEM_CLIENT:
497 case ROLE_SYSTEM_CHART:
498 case ROLE_SYSTEM_DIALOG:
499 case ROLE_SYSTEM_BORDER:
500 case ROLE_SYSTEM_COLUMN:
501 case ROLE_SYSTEM_ROW:
502 case ROLE_SYSTEM_HELPBALLOON:
503 case ROLE_SYSTEM_CHARACTER:
504 case ROLE_SYSTEM_PROPERTYPAGE:
505 case ROLE_SYSTEM_DROPLIST:
506 case ROLE_SYSTEM_DIAL:
507 case ROLE_SYSTEM_HOTKEYFIELD:
508 case ROLE_SYSTEM_DIAGRAM:
509 case ROLE_SYSTEM_ANIMATION:
510 case ROLE_SYSTEM_EQUATION:
511 case ROLE_SYSTEM_WHITESPACE:
512 case ROLE_SYSTEM_IPADDRESS:
513 case ROLE_SYSTEM_OUTLINEBUTTON:
514 WARN(
"No UIA control type mapping for MSAA role %ld\n", role);
518 FIXME(
"UIA control type mapping unimplemented for MSAA role %ld\n", role);
568 IAccessible_Release(acc);
595 IRawElementProviderSimple_AddRef(iface);
618 IAccessible_Release(msaa_prov->
acc);
620 IAccessible_Release(msaa_prov->
parent);
622 IAccessible2_Release(msaa_prov->
ia2);
632 TRACE(
"%p, %p\n", iface, ret_val);
640 TRACE(
"%p, %d, %p\n", iface, pattern_id, ret_val);
645 case UIA_LegacyIAccessiblePatternId:
646 return IRawElementProviderSimple_QueryInterface(iface, &
IID_IUnknown, (
void **)ret_val);
649 FIXME(
"Unimplemented patternId %d\n", pattern_id);
663 TRACE(
"%p, %d, %p\n", iface, prop_id, ret_val);
669 case UIA_ProviderDescriptionPropertyId:
674 case UIA_ControlTypePropertyId:
677 hr = IAccessible_get_accRole(msaa_prov->
acc, msaa_prov->
cid, &
v);
687 case UIA_HasKeyboardFocusPropertyId:
695 case UIA_IsKeyboardFocusablePropertyId:
703 case UIA_IsEnabledPropertyId:
711 case UIA_IsPasswordPropertyId:
719 case UIA_NamePropertyId:
723 hr = IAccessible_get_accName(msaa_prov->
acc, msaa_prov->
cid, &
name);
732 case UIA_IsOffscreenPropertyId:
772 FIXME(
"Unimplemented propertyId %d\n", prop_id);
780 IRawElementProviderSimple **ret_val)
784 TRACE(
"%p, %p\n", iface, ret_val);
836 IRawElementProviderSimple *elprov;
865 if (
acc != msaa_prov->
acc)
866 IAccessible_Release(
acc);
875 hr = IAccessible_get_accChildCount(msaa_prov->
acc, &child_count);
896 IAccessible_AddRef(msaa_prov->
acc);
897 if (
acc != msaa_prov->
acc)
902 IAccessible_Release(
acc);
916 IAccessible_AddRef(msaa_prov->
acc);
946 IAccessible_AddRef(msaa_prov->
parent);
947 if (
acc != msaa_prov->
acc)
952 IAccessible_Release(
acc);
967 FIXME(
"%p, %p: stub!\n", iface, ret_val);
979 TRACE(
"%p, %p\n", iface, ret_val);
981 memset(ret_val, 0,
sizeof(*ret_val));
1008 TRACE(
"%p, %p\n", iface, ret_val);
1015 FIXME(
"%p: stub!\n", iface);
1020 IRawElementProviderFragmentRoot **ret_val)
1023 IRawElementProviderSimple *elprov;
1027 TRACE(
"%p, %p\n", iface, ret_val);
1035 IAccessible_Release(
acc);
1039 hr = IRawElementProviderSimple_QueryInterface(elprov, &IID_IRawElementProviderFragmentRoot, (
void **)ret_val);
1040 IRawElementProviderSimple_Release(elprov);
1086 double x,
double y, IRawElementProviderFragment **ret_val)
1088 FIXME(
"%p, %f, %f, %p: stub!\n", iface,
x,
y, ret_val);
1095 IRawElementProviderSimple *elprov;
1108 hr = IAccessible_get_accFocus(prov->
acc, &
v);
1122 hr = IAccessible_get_accChild(prov->
acc,
v, &disp);
1129 focus_acc = prov->
acc;
1130 IAccessible_AddRef(focus_acc);
1131 focus_cid =
V_I4(&
v);
1144 hr = IDispatch_QueryInterface(
V_DISPATCH(&
v), &IID_IAccessible, (
void **)&focus_acc);
1152 IAccessible_Release(focus_acc);
1158 IAccessible_Release(focus_acc);
1166 IRawElementProviderFragment **ret_val)
1170 IRawElementProviderSimple *elprov;
1173 TRACE(
"%p, %p\n", iface, ret_val);
1246 FIXME(
"%p, %#lx: stub!\n", iface, select_flags);
1252 FIXME(
"%p: stub!\n", iface);
1267 TRACE(
"%p, %p\n", iface, out_acc);
1273 return IAccessible_QueryInterface(msaa_prov->
acc, &IID_IAccessible, (
void **)out_acc);
1280 TRACE(
"%p, %p\n", iface, out_cid);
1281 *out_cid =
V_I4(&msaa_prov->
cid);
1288 FIXME(
"%p, %p: stub!\n", iface, out_name);
1294 FIXME(
"%p, %p: stub!\n", iface, out_value);
1299 BSTR *out_description)
1301 FIXME(
"%p, %p: stub!\n", iface, out_description);
1311 TRACE(
"%p, %p\n", iface, out_role);
1315 hr = IAccessible_get_accRole(msaa_prov->
acc, msaa_prov->
cid, &
v);
1317 *out_role =
V_I4(&
v);
1324 FIXME(
"%p, %p: stub!\n", iface, out_state);
1330 FIXME(
"%p, %p: stub!\n", iface, out_help);
1335 BSTR *out_kbd_shortcut)
1337 FIXME(
"%p, %p: stub!\n", iface, out_kbd_shortcut);
1344 FIXME(
"%p, %p: stub!\n", iface, out_selected);
1349 BSTR *out_default_action)
1351 FIXME(
"%p, %p: stub!\n", iface, out_default_action);
1409 TRACE(
"%p, %ld, %p, %ld, %ld, %p\n", iface, event_id,
hwnd, objid,
cid, event_sink);
1413 case EVENT_SYSTEM_ALERT:
1415 UIA_SystemAlertEventId);
1417 WARN(
"AddAutomationEvent failed with hr %#lx\n",
hr);
1420 case EVENT_OBJECT_REORDER:
1421 case EVENT_OBJECT_SELECTION:
1422 case EVENT_OBJECT_NAMECHANGE:
1423 case EVENT_OBJECT_VALUECHANGE:
1424 case EVENT_OBJECT_HELPCHANGE:
1425 case EVENT_OBJECT_INVOKED:
1426 FIXME(
"WinEvent %ld currently unimplemented\n", event_id);
1459 IAccessible_AddRef(
acc);
1468 WARN(
"WindowFromAccessibleObject failed with hr %#lx\n",
hr);
1488 IRawElementProviderSimple **elprov)
1493 TRACE(
"(%p, %ld, %#lx, %p)\n",
acc, child_id,
flags, elprov);
1511 WARN(
"Cannot wrap an oleacc proxy IAccessible!\n");
1541#define UIA_DEFAULT_MSG_TIMEOUT 10000
1613 IRawElementProviderSimple_AddRef(iface);
1643 TRACE(
"%p, %p\n", iface, ret_val);
1651 FIXME(
"%p, %d, %p: stub\n", iface, pattern_id, ret_val);
1662 TRACE(
"%p, %d, %p\n", iface, prop_id, ret_val);
1670 case UIA_ProviderDescriptionPropertyId:
1675 case UIA_NativeWindowHandlePropertyId:
1680 case UIA_ProcessIdPropertyId:
1692 case UIA_ClassNamePropertyId:
1706 case UIA_NamePropertyId:
1727 case UIA_ControlTypePropertyId:
1751 IRawElementProviderSimple **ret_val)
1753 TRACE(
"%p, %p\n", iface, ret_val);
1781 return IRawElementProviderSimple_QueryInterface(&
base_hwnd_prov->IRawElementProviderSimple_iface,
riid,
ppv);
1787 return IRawElementProviderSimple_AddRef(&
base_hwnd_prov->IRawElementProviderSimple_iface);
1793 return IRawElementProviderSimple_Release(&
base_hwnd_prov->IRawElementProviderSimple_iface);
1800 IRawElementProviderSimple *elprov =
NULL;
1841 hr = IRawElementProviderSimple_QueryInterface(elprov, &IID_IRawElementProviderFragment, (
void **)ret_val);
1842 IRawElementProviderSimple_Release(elprov);
1851 FIXME(
"%p, %p: stub!\n", iface, ret_val);
1862 TRACE(
"%p, %p\n", iface, ret_val);
1864 memset(ret_val, 0,
sizeof(*ret_val));
1884 FIXME(
"%p, %p: stub!\n", iface, ret_val);
1891 FIXME(
"%p: stub!\n", iface);
1896 IRawElementProviderFragmentRoot **ret_val)
1898 FIXME(
"%p, %p: stub!\n", iface, ret_val);
1957 0, 0, { (
DWORD_PTR)(__FILE__
": provider_thread_cs") }
2066 prov_map =
calloc(1,
sizeof(*prov_map));
2084 node_data->
map = prov_map;
2093#define WM_GET_OBJECT_UIA_NODE (WM_USER + 1)
2094#define WM_UIA_PROVIDER_THREAD_STOP (WM_USER + 2)
2108 WARN(
"Failed to add node %p to provider thread list.\n",
node);
2117 if ((lr > 0xffff) || (lr < 0xc000))
2119 WARN(
"Got invalid lresult %Ix\n", lr);
2140 hwnd =
CreateWindowW(
L"Message",
NULL, 0, 0, 0, 0, 0,
HWND_MESSAGE,
NULL,
NULL,
NULL);
2153 TRACE(
"Provider thread started.\n");
2162 TRACE(
"Shutting down UI Automation provider thread.\n");
2189 ready_event, 0,
NULL)))
2208 WARN(
"Failed to start provider thread\n");
2225 ERR(
"Provider thread shutdown with nodes still in the list\n");
2247 WARN(
"UiaGetRuntimeId failed with hr %#lx\n",
hr);
2271 FIXME(
"UIA-to-MSAA bridge not implemented, no provider map to free.\n");
2277 FIXME(
"Unsupported object id %Id, ignoring.\n",
lparam);
2284 WARN(
"Failed to create HUIANODE with hr %#lx\n",
hr);
2300 TRACE(
"(%p)\n", elprov);
static struct sockaddr_in sa
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static int list_empty(struct list_entry *head)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(void *reserved, DWORD model)
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
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)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
LRESULT WINAPI LresultFromObject(REFIID riid, WPARAM wParam, LPUNKNOWN pAcc)
HRESULT WINAPI AccessibleObjectFromWindow(HWND hwnd, DWORD dwObjectID, REFIID riid, void **ppvObject)
HRESULT WINAPI WindowFromAccessibleObject(IAccessible *acc, HWND *phwnd)
HRESULT WINAPI SafeArrayCopy(SAFEARRAY *psa, SAFEARRAY **ppsaOut)
HRESULT WINAPI SafeArrayDestroy(SAFEARRAY *psa)
#define rb_entry(ptr, type, member)
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLint GLint GLsizei GLsizei height
GLint GLint GLsizei width
GLdouble GLdouble GLdouble GLdouble top
GLenum GLuint GLenum GLsizei const GLchar * buf
GLfloat GLfloat GLfloat v2
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 flag
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
This interface exposes the primary set of information about an IAccessible2 enabled accessible object...
static const char * control_type(DWORD dwControlType)
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)
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
#define IsEqualIID(riid1, riid2)
#define LIST_FOR_EACH_SAFE(cursor, cursor2, list)
#define RB_ENTRY_VALUE(element, type, field)
static int rb_put(struct rb_tree *tree, const void *key, struct rb_entry *entry)
static struct rb_entry * rb_get(const struct rb_tree *tree, const void *key)
static void rb_remove(struct rb_tree *tree, struct rb_entry *entry)
static void rb_init(struct rb_tree *tree, rb_compare_func_t compare)
LIST_ENTRY ProcessLocksList
IRawElementProviderFragment IRawElementProviderFragment_iface
IRawElementProviderSimple IRawElementProviderSimple_iface
IRawElementProviderFragmentRoot IRawElementProviderFragmentRoot_iface
IRawElementProviderFragment IRawElementProviderFragment_iface
IRawElementProviderSimple IRawElementProviderSimple_iface
ILegacyIAccessibleProvider ILegacyIAccessibleProvider_iface
IProxyProviderWinEventHandler IProxyProviderWinEventHandler_iface
struct uia_provider_thread_map_entry * map
IWineUiaProvider * prov[PROV_TYPE_COUNT]
struct list prov_thread_list_entry
IWineUiaNode IWineUiaNode_iface
struct list node_map_list_entry
BOOL refuse_hwnd_node_providers
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)
int get_node_provider_type_at_idx(struct uia_node *node, int idx)
HRESULT WINAPI UiaGetRuntimeId(HUIANODE huianode, SAFEARRAY **runtime_id)
BOOL WINAPI UiaNodeRelease(HUIANODE huianode)
HRESULT create_uia_node_from_elprov(IRawElementProviderSimple *elprov, HUIANODE *out_node, BOOL get_hwnd_providers, int node_flags)
HRESULT WINAPI UiaHostProviderFromHwnd(HWND hwnd, IRawElementProviderSimple **provider)
static struct uia_provider * impl_from_IWineUiaProvider(IWineUiaProvider *iface)
BOOL uia_is_top_level_hwnd(HWND hwnd)
static struct uia_node * impl_from_IWineUiaNode(IWineUiaNode *iface)
static void variant_init_bool(VARIANT *v, BOOL val)
static void variant_init_i4(VARIANT *v, int val)
int uia_compare_safearrays(SAFEARRAY *sa1, SAFEARRAY *sa2, int prop_type)
static const IRawElementProviderSimpleVtbl base_hwnd_provider_vtbl
#define UIA_DEFAULT_MSG_TIMEOUT
static HRESULT WINAPI msaa_fragment_get_BoundingRectangle(IRawElementProviderFragment *iface, struct UiaRect *ret_val)
HRESULT WINAPI msaa_provider_QueryInterface(IRawElementProviderSimple *iface, REFIID riid, void **ppv)
static BOOL msaa_acc_compare(IAccessible *acc, IAccessible *acc2)
static const IRawElementProviderFragmentRootVtbl msaa_fragment_root_vtbl
static LONG msaa_role_to_uia_control_type(LONG role)
static HRESULT uia_send_message_timeout(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, UINT timeout, LRESULT *lres)
static BOOL msaa_acc_iface_cmp(IAccessible *acc, IAccessible *acc2)
static const IProxyProviderWinEventHandlerVtbl msaa_winevent_handler_vtbl
static ULONG WINAPI msaa_fragment_root_AddRef(IRawElementProviderFragmentRoot *iface)
static HRESULT WINAPI msaa_acc_provider_GetIAccessible(ILegacyIAccessibleProvider *iface, IAccessible **out_acc)
static CRITICAL_SECTION provider_thread_cs
static HRESULT WINAPI msaa_fragment_get_FragmentRoot(IRawElementProviderFragment *iface, IRawElementProviderFragmentRoot **ret_val)
static IAccessible2 * msaa_acc_get_ia2(IAccessible *acc)
static IAccessible * msaa_acc_da_unwrap(IAccessible *acc)
static struct uia_provider_thread provider_thread
static HRESULT WINAPI msaa_acc_provider_get_ChildId(ILegacyIAccessibleProvider *iface, int *out_cid)
static HRESULT WINAPI msaa_fragment_root_GetFocus(IRawElementProviderFragmentRoot *iface, IRawElementProviderFragment **ret_val)
static HRESULT WINAPI msaa_acc_provider_get_KeyboardShortcut(ILegacyIAccessibleProvider *iface, BSTR *out_kbd_shortcut)
HRESULT create_msaa_provider(IAccessible *acc, LONG child_id, HWND hwnd, BOOL root_acc_known, BOOL is_root_acc, IRawElementProviderSimple **elprov)
static BOOL uia_start_provider_thread(void)
static HRESULT get_uia_control_type_for_hwnd(HWND hwnd, int *control_type)
static ULONG WINAPI msaa_winevent_handler_Release(IProxyProviderWinEventHandler *iface)
static HRESULT WINAPI base_hwnd_fragment_SetFocus(IRawElementProviderFragment *iface)
static HRESULT uia_get_hr_for_last_error(void)
static const IRawElementProviderFragmentVtbl base_hwnd_fragment_vtbl
static HRESULT WINAPI msaa_acc_provider_get_Role(ILegacyIAccessibleProvider *iface, DWORD *out_role)
static ULONG WINAPI msaa_fragment_Release(IRawElementProviderFragment *iface)
static struct msaa_provider * impl_from_msaa_winevent_handler(IProxyProviderWinEventHandler *iface)
void uia_stop_provider_thread(void)
static HRESULT msaa_acc_get_next_child(IAccessible *acc, LONG start_pos, LONG direction, IAccessible **child, LONG *child_id, LONG *child_pos, BOOL check_visible)
static HRESULT WINAPI msaa_acc_provider_get_Name(ILegacyIAccessibleProvider *iface, BSTR *out_name)
static HRESULT WINAPI base_hwnd_provider_GetPropertyValue(IRawElementProviderSimple *iface, PROPERTYID prop_id, VARIANT *ret_val)
HRESULT WINAPI UiaDisconnectProvider(IRawElementProviderSimple *elprov)
static HRESULT WINAPI msaa_winevent_handler_RespondToWinEvent(IProxyProviderWinEventHandler *iface, DWORD event_id, HWND hwnd, LONG objid, LONG cid, IProxyProviderWinEventSink *event_sink)
static HRESULT WINAPI msaa_fragment_QueryInterface(IRawElementProviderFragment *iface, REFIID riid, void **ppv)
static HRESULT WINAPI msaa_acc_provider_GetSelection(ILegacyIAccessibleProvider *iface, SAFEARRAY **out_selected)
HRESULT WINAPI msaa_provider_GetPatternProvider(IRawElementProviderSimple *iface, PATTERNID pattern_id, IUnknown **ret_val)
static ULONG WINAPI base_hwnd_fragment_Release(IRawElementProviderFragment *iface)
static HRESULT WINAPI base_hwnd_fragment_GetRuntimeId(IRawElementProviderFragment *iface, SAFEARRAY **ret_val)
static ULONG WINAPI msaa_acc_provider_Release(ILegacyIAccessibleProvider *iface)
static HRESULT msaa_acc_get_service(IAccessible *acc, REFGUID sid, REFIID riid, void **service)
static const IRawElementProviderFragmentVtbl msaa_fragment_vtbl
static ULONG WINAPI base_hwnd_fragment_AddRef(IRawElementProviderFragment *iface)
static struct msaa_provider * impl_from_msaa_acc_provider(ILegacyIAccessibleProvider *iface)
static HRESULT WINAPI msaa_fragment_root_QueryInterface(IRawElementProviderFragmentRoot *iface, REFIID riid, void **ppv)
#define WM_UIA_PROVIDER_THREAD_STOP
static BOOL msaa_check_root_acc(struct msaa_provider *msaa_prov)
static struct base_hwnd_provider * impl_from_base_hwnd_provider(IRawElementProviderSimple *iface)
static int uia_runtime_id_compare(const void *key, const struct rb_entry *entry)
ULONG WINAPI msaa_provider_AddRef(IRawElementProviderSimple *iface)
LRESULT uia_lresult_from_node(HUIANODE huianode)
static HRESULT msaa_acc_prop_match(IAccessible *acc, IAccessible *acc2)
static HRESULT WINAPI msaa_fragment_GetRuntimeId(IRawElementProviderFragment *iface, SAFEARRAY **ret_val)
static HRESULT WINAPI msaa_acc_provider_get_Value(ILegacyIAccessibleProvider *iface, BSTR *out_value)
static ULONG WINAPI base_hwnd_provider_Release(IRawElementProviderSimple *iface)
static void uia_provider_thread_disconnect_node(SAFEARRAY *sa)
static ULONG WINAPI msaa_acc_provider_AddRef(ILegacyIAccessibleProvider *iface)
static HRESULT WINAPI msaa_fragment_GetEmbeddedFragmentRoots(IRawElementProviderFragment *iface, SAFEARRAY **ret_val)
LRESULT WINAPI UiaReturnRawElementProvider(HWND hwnd, WPARAM wparam, LPARAM lparam, IRawElementProviderSimple *elprov)
static struct base_hwnd_provider * impl_from_base_hwnd_fragment(IRawElementProviderFragment *iface)
static BOOL msaa_acc_is_oleacc_proxy(IAccessible *acc)
static HRESULT WINAPI msaa_acc_provider_get_DefaultAction(ILegacyIAccessibleProvider *iface, BSTR *out_default_action)
static HRESULT WINAPI msaa_fragment_Navigate(IRawElementProviderFragment *iface, enum NavigateDirection direction, IRawElementProviderFragment **ret_val)
static struct msaa_provider * impl_from_msaa_fragment_root(IRawElementProviderFragmentRoot *iface)
static HRESULT uia_provider_thread_add_node(HUIANODE node, SAFEARRAY *rt_id)
static HRESULT WINAPI msaa_acc_provider_Select(ILegacyIAccessibleProvider *iface, LONG select_flags)
static HRESULT WINAPI msaa_acc_provider_get_Help(ILegacyIAccessibleProvider *iface, BSTR *out_help)
void uia_provider_thread_remove_node(HUIANODE node)
ULONG WINAPI msaa_provider_Release(IRawElementProviderSimple *iface)
static HRESULT WINAPI base_hwnd_fragment_GetEmbeddedFragmentRoots(IRawElementProviderFragment *iface, SAFEARRAY **ret_val)
static HRESULT WINAPI msaa_fragment_root_ElementProviderFromPoint(IRawElementProviderFragmentRoot *iface, double x, double y, IRawElementProviderFragment **ret_val)
static struct msaa_provider * impl_from_msaa_fragment(IRawElementProviderFragment *iface)
static HRESULT WINAPI base_hwnd_provider_get_HostRawElementProvider(IRawElementProviderSimple *iface, IRawElementProviderSimple **ret_val)
static const ILegacyIAccessibleProviderVtbl msaa_acc_provider_vtbl
HRESULT WINAPI msaa_provider_get_HostRawElementProvider(IRawElementProviderSimple *iface, IRawElementProviderSimple **ret_val)
HRESULT WINAPI msaa_provider_get_ProviderOptions(IRawElementProviderSimple *iface, enum ProviderOptions *ret_val)
static HRESULT WINAPI msaa_acc_provider_get_Description(ILegacyIAccessibleProvider *iface, BSTR *out_description)
static CRITICAL_SECTION_DEBUG provider_thread_cs_debug
static ULONG WINAPI msaa_fragment_AddRef(IRawElementProviderFragment *iface)
static struct msaa_provider * impl_from_msaa_provider(IRawElementProviderSimple *iface)
static DWORD WINAPI uia_provider_thread_proc(void *arg)
static HRESULT WINAPI msaa_winevent_handler_QueryInterface(IProxyProviderWinEventHandler *iface, REFIID riid, void **ppv)
static HRESULT msaa_check_acc_state_hres(IAccessible *acc, VARIANT cid, ULONG flag)
#define WM_GET_OBJECT_UIA_NODE
static HRESULT WINAPI msaa_acc_provider_get_State(ILegacyIAccessibleProvider *iface, DWORD *out_state)
static HRESULT WINAPI base_hwnd_fragment_get_BoundingRectangle(IRawElementProviderFragment *iface, struct UiaRect *ret_val)
static HRESULT WINAPI msaa_acc_provider_DoDefaultAction(ILegacyIAccessibleProvider *iface)
static ULONG WINAPI msaa_winevent_handler_AddRef(IProxyProviderWinEventHandler *iface)
HRESULT WINAPI UiaProviderFromIAccessible(IAccessible *acc, LONG child_id, DWORD flags, IRawElementProviderSimple **elprov)
static HRESULT WINAPI base_hwnd_provider_get_ProviderOptions(IRawElementProviderSimple *iface, enum ProviderOptions *ret_val)
static HRESULT WINAPI base_hwnd_fragment_Navigate(IRawElementProviderFragment *iface, enum NavigateDirection direction, IRawElementProviderFragment **ret_val)
static ULONG WINAPI base_hwnd_provider_AddRef(IRawElementProviderSimple *iface)
static BOOL msaa_check_acc_state(IAccessible *acc, VARIANT cid, ULONG flag)
static const IRawElementProviderSimpleVtbl msaa_provider_vtbl
static HRESULT WINAPI base_hwnd_provider_QueryInterface(IRawElementProviderSimple *iface, REFIID riid, void **ppv)
static ULONG WINAPI msaa_fragment_root_Release(IRawElementProviderFragmentRoot *iface)
static HRESULT WINAPI base_hwnd_fragment_get_FragmentRoot(IRawElementProviderFragment *iface, IRawElementProviderFragmentRoot **ret_val)
static HRESULT WINAPI base_hwnd_provider_GetPatternProvider(IRawElementProviderSimple *iface, PATTERNID pattern_id, IUnknown **ret_val)
static HRESULT WINAPI base_hwnd_fragment_QueryInterface(IRawElementProviderFragment *iface, REFIID riid, void **ppv)
static HRESULT WINAPI msaa_fragment_SetFocus(IRawElementProviderFragment *iface)
static HRESULT WINAPI msaa_acc_provider_SetValue(ILegacyIAccessibleProvider *iface, LPCWSTR val)
HRESULT create_base_hwnd_provider(HWND hwnd, IRawElementProviderSimple **elprov)
HRESULT WINAPI msaa_provider_GetPropertyValue(IRawElementProviderSimple *iface, PROPERTYID prop_id, VARIANT *ret_val)
static HRESULT WINAPI msaa_acc_provider_QueryInterface(ILegacyIAccessibleProvider *iface, REFIID riid, void **ppv)
static HRESULT msaa_acc_get_focus(struct msaa_provider *prov, struct msaa_provider **out_prov)
static HRESULT msaa_acc_get_child_pos(IAccessible *acc, IAccessible **out_parent, LONG *out_child_pos)
static HRESULT msaa_acc_get_parent(IAccessible *acc, IAccessible **parent)
static LRESULT CALLBACK uia_provider_thread_msg_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
static IRawElementProviderSimple * base_hwnd_prov
@ ProviderOptions_ClientSideProvider
@ ProviderOptions_ServerSideProvider
@ ProviderOptions_UseComThreading
@ NavigateDirection_NextSibling
@ NavigateDirection_PreviousSibling
@ NavigateDirection_Parent
@ NavigateDirection_LastChild
@ NavigateDirection_FirstChild
#define UIA_E_ELEMENTNOTAVAILABLE
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
void WINAPI VariantInit(VARIANTARG *pVarg)
DWORD WINAPI GetLastError(void)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
#define ERROR_INVALID_WINDOW_HANDLE
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define GetWindowLongPtrW
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)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define STATE_SYSTEM_FOCUSED
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
LRESULT WINAPI SendMessageTimeoutW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM, _In_ UINT, _In_ UINT, _Out_opt_ PDWORD_PTR)
BOOL WINAPI IsIconic(_In_ HWND)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define STATE_SYSTEM_FOCUSABLE
BOOL WINAPI IntersectRect(_Out_ LPRECT, _In_ LPCRECT, _In_ LPCRECT)
#define STATE_SYSTEM_INVISIBLE
#define STATE_SYSTEM_OFFSCREEN
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
#define STATE_SYSTEM_UNAVAILABLE
HWND WINAPI GetWindow(_In_ HWND, _In_ UINT)
int WINAPI GetClassNameW(_In_ HWND hWnd, _Out_writes_to_(nMaxCount, return) LPWSTR lpClassName, _In_ int nMaxCount)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
#define SetWindowLongPtrW
BOOL WINAPI DestroyWindow(_In_ HWND)
HWND WINAPI GetAncestor(_In_ HWND, _In_ UINT)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define STATE_SYSTEM_PROTECTED