[PATCH v2 2/2] oleacc: Add STATE_SYSTEM_FOCUSED test for default client object.

Connor McAdams cmcadams at codeweavers.com
Thu Aug 12 11:53:28 CDT 2021


Signed-off-by: Connor McAdams <cmcadams at codeweavers.com>
---
 dlls/oleacc/tests/main.c | 35 +++++++++++++++++++++++++++++++++--
 1 file changed, 33 insertions(+), 2 deletions(-)

diff --git a/dlls/oleacc/tests/main.c b/dlls/oleacc/tests/main.c
index 5823b4336ba..b81d7d61288 100644
--- a/dlls/oleacc/tests/main.c
+++ b/dlls/oleacc/tests/main.c
@@ -1698,6 +1698,23 @@ static void test_AccessibleChildren(IAccessible *acc)
     ok(V_VT(children+2) == VT_EMPTY, "V_VT(children+2) = %d\n", V_VT(children+2));
 }
 
+static DWORD WINAPI acc_focus_test_thread(LPVOID lpParameter)
+{
+    IAccessible *acc = (IAccessible *)lpParameter;
+    VARIANT vid, v;
+    HRESULT hr;
+
+    V_VT(&vid) = VT_I4;
+    V_I4(&vid) = CHILDID_SELF;
+    hr = IAccessible_get_accState(acc, vid, &v);
+    ok(hr == S_OK, "got %x\n", hr);
+    ok(V_VT(&v) == VT_I4, "V_VT(&v) = %d\n", V_VT(&v));
+    ok(V_I4(&v) == (STATE_SYSTEM_FOCUSABLE|STATE_SYSTEM_INVISIBLE|STATE_SYSTEM_FOCUSED),
+            "V_I4(&v) = %x\n", V_I4(&v));
+
+    return 0;
+}
+
 static void test_default_client_accessible_object(void)
 {
     IAccessible *acc;
@@ -1712,6 +1729,7 @@ static void test_default_client_accessible_object(void)
     RECT rect;
     LONG l, left, top, width, height;
     ULONG fetched;
+    HANDLE hthread;
 
     hwnd = CreateWindowA("oleacc_test", "wnd &t &junk", WS_OVERLAPPEDWINDOW,
             0, 0, 100, 100, NULL, NULL, NULL, NULL);
@@ -1745,7 +1763,6 @@ static void test_default_client_accessible_object(void)
 
     IAccessible_Release(acc);
 
-
     /* Test the button */
     hr = CreateStdAccessibleObject(btn, OBJID_CLIENT, &IID_IAccessible, (void**)&acc);
     ok(hr == S_OK, "got %x\n", hr);
@@ -1764,7 +1781,6 @@ static void test_default_client_accessible_object(void)
 
     IAccessible_Release(acc);
 
-
     /* Now we can test and destroy the top-level window */
     hr = CreateStdAccessibleObject(hwnd, OBJID_CLIENT, &IID_IAccessible, (void**)&acc);
     ok(hr == S_OK, "got %x\n", hr);
@@ -1870,6 +1886,21 @@ static void test_default_client_accessible_object(void)
     ok(V_I4(&v) == (STATE_SYSTEM_FOCUSABLE|STATE_SYSTEM_INVISIBLE),
             "V_I4(&v) = %x\n", V_I4(&v));
 
+    /*
+     * Test that STATE_SYSTEM_FOCUSED works, and is specific to the UI Thread
+     * of the HWND the IAccessible represents.
+     */
+    SetFocus(hwnd);
+    hr = IAccessible_get_accState(acc, vid, &v);
+    ok(hr == S_OK, "got %x\n", hr);
+    ok(V_VT(&v) == VT_I4, "V_VT(&v) = %d\n", V_VT(&v));
+    ok(V_I4(&v) == (STATE_SYSTEM_FOCUSABLE|STATE_SYSTEM_INVISIBLE|STATE_SYSTEM_FOCUSED),
+            "V_I4(&v) = %x\n", V_I4(&v));
+
+    hthread = CreateThread(NULL, 0, acc_focus_test_thread, (void *)acc, 0, NULL);
+    ok(!WaitForSingleObject(hthread, 10000), "Focus thread failed to return!\n");
+    CloseHandle(hthread);
+
     str = (void*)0xdeadbeef;
     hr = IAccessible_get_accHelp(acc, vid, &str);
     ok(hr == S_FALSE, "got %x\n", hr);
-- 
2.25.1




More information about the wine-devel mailing list