Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
a97cdeaf
Commit
a97cdeaf
authored
Mar 23, 2023
by
Connor McAdams
Committed by
Alexandre Julliard
Apr 19, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
uiautomationcore: Implement UiaGetRootNode.
Signed-off-by:
Connor McAdams
<
cmcadams@codeweavers.com
>
parent
af6d8261
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
74 additions
and
1 deletion
+74
-1
uiautomation.c
dlls/uiautomationcore/tests/uiautomation.c
+62
-0
uia_client.c
dlls/uiautomationcore/uia_client.c
+10
-0
uiautomationcore.spec
dlls/uiautomationcore/uiautomationcore.spec
+1
-1
uiautomationcoreapi.h
include/uiautomationcoreapi.h
+1
-0
No files found.
dlls/uiautomationcore/tests/uiautomation.c
View file @
a97cdeaf
...
...
@@ -12792,6 +12792,67 @@ static void test_default_clientside_providers(void)
CoUninitialize
();
}
static
void
test_UiaGetRootNode
(
void
)
{
HUIANODE
node
;
HRESULT
hr
;
VARIANT
v
;
CoInitializeEx
(
NULL
,
COINIT_MULTITHREADED
);
UiaRegisterProviderCallback
(
test_uia_provider_callback
);
/*
* UiaGetRootNode is the same as calling UiaNodeFromHandle with the
* desktop window handle.
*/
initialize_provider
(
&
Provider_hwnd
,
ProviderOptions_ClientSideProvider
,
GetDesktopWindow
(),
TRUE
);
initialize_provider
(
&
Provider_nc
,
ProviderOptions_ClientSideProvider
|
ProviderOptions_NonClientAreaProvider
,
GetDesktopWindow
(),
TRUE
);
initialize_provider
(
&
Provider_proxy
,
ProviderOptions_ClientSideProvider
,
GetDesktopWindow
(),
TRUE
);
Provider_proxy
.
ignore_hwnd_prop
=
TRUE
;
base_hwnd_prov
=
&
Provider_hwnd
.
IRawElementProviderSimple_iface
;
proxy_prov
=
&
Provider_proxy
.
IRawElementProviderSimple_iface
;
nc_prov
=
&
Provider_nc
.
IRawElementProviderSimple_iface
;
method_sequences_enabled
=
FALSE
;
SET_EXPECT
(
prov_callback_base_hwnd
);
SET_EXPECT
(
prov_callback_nonclient
);
SET_EXPECT
(
prov_callback_proxy
);
hr
=
UiaGetRootNode
(
&
node
);
ok
(
hr
==
S_OK
,
"Unexpected hr %#lx.
\n
"
,
hr
);
ok
(
!!
node
,
"Node == NULL.
\n
"
);
ok
(
Provider_proxy
.
ref
==
2
,
"Unexpected refcnt %ld
\n
"
,
Provider_proxy
.
ref
);
ok
(
Provider_hwnd
.
ref
==
2
,
"Unexpected refcnt %ld
\n
"
,
Provider_hwnd
.
ref
);
ok
(
Provider_nc
.
ref
==
2
,
"Unexpected refcnt %ld
\n
"
,
Provider_nc
.
ref
);
CHECK_CALLED
(
prov_callback_base_hwnd
);
CHECK_CALLED
(
prov_callback_nonclient
);
CHECK_CALLED
(
prov_callback_proxy
);
hr
=
UiaGetPropertyValue
(
node
,
UIA_ProviderDescriptionPropertyId
,
&
v
);
ok
(
hr
==
S_OK
,
"Unexpected hr %#lx
\n
"
,
hr
);
check_node_provider_desc_prefix
(
V_BSTR
(
&
v
),
GetCurrentProcessId
(),
GetDesktopWindow
());
check_node_provider_desc
(
V_BSTR
(
&
v
),
L"Main"
,
L"Provider_proxy"
,
TRUE
);
check_node_provider_desc
(
V_BSTR
(
&
v
),
L"Hwnd"
,
L"Provider_hwnd"
,
FALSE
);
check_node_provider_desc
(
V_BSTR
(
&
v
),
L"Nonclient"
,
L"Provider_nc"
,
FALSE
);
VariantClear
(
&
v
);
ok
(
UiaNodeRelease
(
node
),
"UiaNodeRelease returned FALSE
\n
"
);
ok
(
Provider_proxy
.
ref
==
1
,
"Unexpected refcnt %ld
\n
"
,
Provider_proxy
.
ref
);
ok
(
Provider_hwnd
.
ref
==
1
,
"Unexpected refcnt %ld
\n
"
,
Provider_hwnd
.
ref
);
ok
(
Provider_nc
.
ref
==
1
,
"Unexpected refcnt %ld
\n
"
,
Provider_nc
.
ref
);
initialize_provider
(
&
Provider_hwnd
,
ProviderOptions_ClientSideProvider
,
NULL
,
TRUE
);
initialize_provider
(
&
Provider_nc
,
ProviderOptions_ClientSideProvider
|
ProviderOptions_NonClientAreaProvider
,
NULL
,
TRUE
);
initialize_provider
(
&
Provider_proxy
,
ProviderOptions_ClientSideProvider
,
NULL
,
TRUE
);
base_hwnd_prov
=
proxy_prov
=
nc_prov
=
NULL
;
method_sequences_enabled
=
TRUE
;
UiaRegisterProviderCallback
(
NULL
);
CoUninitialize
();
}
/*
* Once a process returns a UI Automation provider with
* UiaReturnRawElementProvider it ends up in an implicit MTA until exit. This
...
...
@@ -12860,6 +12921,7 @@ START_TEST(uiautomation)
test_UiaFind
();
test_CUIAutomation
();
test_default_clientside_providers
();
test_UiaGetRootNode
();
if
(
uia_dll
)
{
pUiaProviderFromIAccessible
=
(
void
*
)
GetProcAddress
(
uia_dll
,
"UiaProviderFromIAccessible"
);
...
...
dlls/uiautomationcore/uia_client.c
View file @
a97cdeaf
...
...
@@ -2369,6 +2369,16 @@ HRESULT WINAPI UiaNodeFromHandle(HWND hwnd, HUIANODE *huianode)
}
/***********************************************************************
* UiaGetRootNode (uiautomationcore.@)
*/
HRESULT
WINAPI
UiaGetRootNode
(
HUIANODE
*
huianode
)
{
TRACE
(
"(%p)
\n
"
,
huianode
);
return
UiaNodeFromHandle
(
GetDesktopWindow
(),
huianode
);
}
/***********************************************************************
* UiaNodeRelease (uiautomationcore.@)
*/
BOOL
WINAPI
UiaNodeRelease
(
HUIANODE
huianode
)
...
...
dlls/uiautomationcore/uiautomationcore.spec
View file @
a97cdeaf
...
...
@@ -65,7 +65,7 @@
@ stdcall UiaGetPropertyValue(ptr long ptr)
@ stdcall UiaGetReservedMixedAttributeValue(ptr)
@ stdcall UiaGetReservedNotSupportedValue(ptr)
@ st
ub UiaGetRootNode
@ st
dcall UiaGetRootNode(ptr)
@ stdcall UiaGetRuntimeId(ptr ptr)
@ stdcall UiaGetUpdatedCache(ptr ptr long ptr ptr ptr)
@ stub UiaHPatternObjectFromVariant
...
...
include/uiautomationcoreapi.h
View file @
a97cdeaf
...
...
@@ -544,6 +544,7 @@ BOOL WINAPI UiaNodeRelease(HUIANODE huianode);
HRESULT
WINAPI
UiaGetRuntimeId
(
HUIANODE
huianode
,
SAFEARRAY
**
runtime_id
);
HRESULT
WINAPI
UiaHUiaNodeFromVariant
(
VARIANT
*
in_val
,
HUIANODE
*
huianode
);
HRESULT
WINAPI
UiaNodeFromHandle
(
HWND
hwnd
,
HUIANODE
*
huianode
);
HRESULT
WINAPI
UiaGetRootNode
(
HUIANODE
*
huianode
);
HRESULT
WINAPI
UiaDisconnectProvider
(
IRawElementProviderSimple
*
elprov
);
HRESULT
WINAPI
UiaGetUpdatedCache
(
HUIANODE
huianode
,
struct
UiaCacheRequest
*
cache_req
,
enum
NormalizeState
normalize_state
,
struct
UiaCondition
*
normalize_cond
,
SAFEARRAY
**
out_req
,
BSTR
*
tree_struct
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment