[PATCH 2/2] d3d9/tests: Add some message processing to test_wndproc().

Henri Verbeet hverbeet at codeweavers.com
Fri Mar 19 08:33:19 CDT 2010


For some reason Windows XP allows device creation to be blocked by the lack of
message processing in wndproc_thread().
---
 dlls/d3d9/tests/device.c |   22 ++++++++++++++++++----
 1 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/dlls/d3d9/tests/device.c b/dlls/d3d9/tests/device.c
index 5ef2910..f133cd5 100644
--- a/dlls/d3d9/tests/device.c
+++ b/dlls/d3d9/tests/device.c
@@ -2370,8 +2370,19 @@ static DWORD WINAPI wndproc_thread(void *param)
     ret = SetEvent(p->window_created);
     ok(ret, "SetEvent failed, last error %#x.\n", GetLastError());
 
-    res = WaitForSingleObject(p->test_finished, INFINITE);
-    ok(res == WAIT_OBJECT_0, "Wait failed (%#x), last error %#x.\n", res, GetLastError());
+    for (;;)
+    {
+        MSG msg;
+
+        while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
+        res = WaitForSingleObject(p->test_finished, 100);
+        if (res == WAIT_OBJECT_0) break;
+        if (res != WAIT_TIMEOUT)
+        {
+            ok(0, "Wait failed (%#x), last error %#x.\n", res, GetLastError());
+            break;
+        }
+    }
 
     DestroyWindow(p->dummy_window);
 
@@ -2389,6 +2400,7 @@ static void test_wndproc(void)
     LONG_PTR proc;
     ULONG ref;
     DWORD res;
+    MSG msg;
 
     if (!(d3d9 = pDirect3DCreate9(D3D_SDK_VERSION)))
     {
@@ -2434,6 +2446,8 @@ static void test_wndproc(void)
     expect_message.window = focus_window;
     expect_message.message = WM_SETFOCUS;
 
+    while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
+
     device = create_device(d3d9, device_window, focus_window, FALSE);
     if (!device)
     {
@@ -2444,9 +2458,9 @@ static void test_wndproc(void)
     ok(!expect_message.message, "Expected message %#x for window %p, but didn't receive it.\n",
             expect_message.message, expect_message.window);
     tmp = GetFocus();
-    todo_wine ok(tmp == focus_window, "Expected focus %p, got %p.\n", focus_window, tmp);
+    ok(tmp == focus_window, "Expected focus %p, got %p.\n", focus_window, tmp);
     tmp = GetForegroundWindow();
-    todo_wine ok(tmp == focus_window, "Expected foreground window %p, got %p.\n", focus_window, tmp);
+    ok(tmp == focus_window, "Expected foreground window %p, got %p.\n", focus_window, tmp);
     SetForegroundWindow(focus_window);
 
     filter_messages = focus_window;
-- 
1.6.4.4




More information about the wine-patches mailing list