[PATCH 5/6] ddraw/tests: Test messages on focus loss.

Stefan Dösinger stefan at codeweavers.com
Wed Nov 12 15:15:38 CST 2014


---
 dlls/ddraw/tests/ddraw1.c |  97 +++++++++++++++++++++++++++++++-------------
 dlls/ddraw/tests/ddraw2.c | 101 ++++++++++++++++++++++++++++++++--------------
 dlls/ddraw/tests/ddraw4.c | 101 ++++++++++++++++++++++++++++++++--------------
 dlls/ddraw/tests/ddraw7.c | 101 ++++++++++++++++++++++++++++++++--------------
 4 files changed, 278 insertions(+), 122 deletions(-)

diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
index 0ae204c..b31e25e 100644
--- a/dlls/ddraw/tests/ddraw1.c
+++ b/dlls/ddraw/tests/ddraw1.c
@@ -428,12 +428,26 @@ static void destroy_material(IDirect3DMaterial *material)
     IDirect3DMaterial_Release(material);
 }
 
-static const UINT *expect_messages;
+struct message
+{
+    UINT message;
+    BOOL check_wparam;
+    WPARAM expect_wparam;
+};
+
+static const struct message *expect_messages;
 
 static LRESULT CALLBACK test_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
 {
-    if (expect_messages && message == *expect_messages)
+    if (expect_messages && message == expect_messages->message)
+    {
+        if (expect_messages->check_wparam)
+            ok (wparam == expect_messages->expect_wparam,
+                    "Got unexpected wparam %lx for message %x, expected %lx.\n",
+                    wparam, message, expect_messages->expect_wparam);
+
         ++expect_messages;
+    }
 
     return DefWindowProcA(hwnd, message, wparam, lparam);
 }
@@ -1878,15 +1892,15 @@ static void test_wndproc(void)
     HRESULT hr;
     ULONG ref;
 
-    static const UINT messages[] =
+    static struct message messages[] =
     {
-        WM_WINDOWPOSCHANGING,
-        WM_MOVE,
-        WM_SIZE,
-        WM_WINDOWPOSCHANGING,
-        WM_ACTIVATE,
-        WM_SETFOCUS,
-        0,
+        {WM_WINDOWPOSCHANGING,  FALSE,  0},
+        {WM_MOVE,               FALSE,  0},
+        {WM_SIZE,               FALSE,  0},
+        {WM_WINDOWPOSCHANGING,  FALSE,  0},
+        {WM_ACTIVATE,           FALSE,  0},
+        {WM_SETFOCUS,           FALSE,  0},
+        {0,                     FALSE,  0},
     };
 
     /* DDSCL_EXCLUSIVE replaces the window's window proc. */
@@ -1906,7 +1920,7 @@ static void test_wndproc(void)
     expect_messages = messages;
     hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
     ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     proc = GetWindowLongPtrA(window, GWLP_WNDPROC);
     ok(proc != (LONG_PTR)test_proc, "Expected wndproc != %#lx, got %#lx.\n",
@@ -2147,19 +2161,34 @@ static void test_coop_level_mode_set(void)
     BOOL ret;
     LONG change_ret;
 
-    static const UINT exclusive_messages[] =
+    static const struct message exclusive_messages[] =
     {
-        WM_WINDOWPOSCHANGING,
-        WM_WINDOWPOSCHANGED,
-        WM_SIZE,
-        WM_DISPLAYCHANGE,
-        0,
+        {WM_WINDOWPOSCHANGING,  FALSE,  0},
+        {WM_WINDOWPOSCHANGED,   FALSE,  0},
+        {WM_SIZE,               FALSE,  0},
+        {WM_DISPLAYCHANGE,      FALSE,  0},
+        {0,                     FALSE,  0},
+    };
+    static const struct message exclusive_focus_loss_messages[] =
+    {
+        {WM_ACTIVATE,           TRUE,   WA_INACTIVE},
+        /*{WM_DISPLAYCHANGE,      FALSE,  0}, Not yet implemented on Wine. */
+        {WM_WINDOWPOSCHANGING,  FALSE,  0},
+        /* Like d3d8 and d3d9 ddraw seems to use SW_SHOWMINIMIZED instead of
+         * SW_MINIMIZED, causing a recursive window activation that does not
+         * produe the same result in Wine yet. Ignore the difference for now.
+         * {WM_ACTIVATE,           TRUE,   0x200000 | WA_ACTIVE}, */
+        {WM_WINDOWPOSCHANGED,   FALSE,  0},
+        {WM_MOVE,               FALSE,  0},
+        {WM_SIZE,               TRUE,   SIZE_MINIMIZED},
+        {WM_ACTIVATEAPP,        TRUE,   FALSE},
+        {0,                     FALSE,  0},
     };
 
-    static const UINT normal_messages[] =
+    static const struct message normal_messages[] =
     {
-        WM_DISPLAYCHANGE,
-        0,
+        {WM_DISPLAYCHANGE,      FALSE,  0},
+        {0,                     FALSE,  0},
     };
 
     ddraw = create_ddraw();
@@ -2234,7 +2263,7 @@ static void test_coop_level_mode_set(void)
     hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
     ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(screen_size.cx == param.ddraw_width && screen_size.cy == param.ddraw_height,
             "Expected screen size %ux%u, got %ux%u.\n",
@@ -2280,7 +2309,7 @@ static void test_coop_level_mode_set(void)
     change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
     ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(screen_size.cx == param.user32_width && screen_size.cy == param.user32_height,
             "Expected screen size %ux%u, got %ux%u.\n",
@@ -2291,6 +2320,16 @@ static void test_coop_level_mode_set(void)
             user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom,
             r.left, r.top, r.right, r.bottom);
 
+    expect_messages = exclusive_focus_loss_messages;
+    SetForegroundWindow(GetDesktopWindow());
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
+
+    ShowWindow(window, SW_RESTORE);
+    hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
+    ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
+    hr = IDirectDrawSurface_Restore(primary);
+    ok(SUCCEEDED(hr), "Surface Restore failed, hr %#x.\n", hr);
+
     PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
     expect_messages = exclusive_messages;
     screen_size.cx = 0;
@@ -2299,7 +2338,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw_RestoreDisplayMode(ddraw);
     ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
 
-    todo_wine ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     todo_wine ok(screen_size.cx == registry_mode.dmPelsWidth
             && screen_size.cy == registry_mode.dmPelsHeight,
@@ -2385,7 +2424,7 @@ static void test_coop_level_mode_set(void)
     change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
     ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2409,7 +2448,7 @@ static void test_coop_level_mode_set(void)
     }
     ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2453,7 +2492,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw_RestoreDisplayMode(ddraw);
     ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2548,7 +2587,7 @@ static void test_coop_level_mode_set(void)
     change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
     ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2565,7 +2604,7 @@ static void test_coop_level_mode_set(void)
     hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
     ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2609,7 +2648,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw_RestoreDisplayMode(ddraw);
     ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
index 334d89e..84dd17a 100644
--- a/dlls/ddraw/tests/ddraw2.c
+++ b/dlls/ddraw/tests/ddraw2.c
@@ -361,12 +361,26 @@ static void destroy_material(IDirect3DMaterial2 *material)
     IDirect3DMaterial2_Release(material);
 }
 
-static const UINT *expect_messages;
+struct message
+{
+    UINT message;
+    BOOL check_wparam;
+    WPARAM expect_wparam;
+};
+
+static const struct message *expect_messages;
 
 static LRESULT CALLBACK test_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
 {
-    if (expect_messages && message == *expect_messages)
+    if (expect_messages && message == expect_messages->message)
+    {
+        if (expect_messages->check_wparam)
+            ok (wparam == expect_messages->expect_wparam,
+                    "Got unexpected wparam %lx for message %x, expected %lx.\n",
+                    wparam, message, expect_messages->expect_wparam);
+
         ++expect_messages;
+    }
 
     return DefWindowProcA(hwnd, message, wparam, lparam);
 }
@@ -2066,15 +2080,15 @@ static void test_wndproc(void)
     HRESULT hr;
     ULONG ref;
 
-    static const UINT messages[] =
+    static struct message messages[] =
     {
-        WM_WINDOWPOSCHANGING,
-        WM_MOVE,
-        WM_SIZE,
-        WM_WINDOWPOSCHANGING,
-        WM_ACTIVATE,
-        WM_SETFOCUS,
-        0,
+        {WM_WINDOWPOSCHANGING,  FALSE,  0},
+        {WM_MOVE,               FALSE,  0},
+        {WM_SIZE,               FALSE,  0},
+        {WM_WINDOWPOSCHANGING,  FALSE,  0},
+        {WM_ACTIVATE,           FALSE,  0},
+        {WM_SETFOCUS,           FALSE,  0},
+        {0,                     FALSE,  0},
     };
 
     /* DDSCL_EXCLUSIVE replaces the window's window proc. */
@@ -2094,7 +2108,7 @@ static void test_wndproc(void)
     expect_messages = messages;
     hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
     ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     proc = GetWindowLongPtrA(window, GWLP_WNDPROC);
     ok(proc != (LONG_PTR)test_proc, "Expected wndproc != %#lx, got %#lx.\n",
@@ -2346,19 +2360,34 @@ static void test_coop_level_mode_set(void)
     BOOL ret;
     LONG change_ret;
 
-    static const UINT exclusive_messages[] =
+    static const struct message exclusive_messages[] =
     {
-        WM_WINDOWPOSCHANGING,
-        WM_WINDOWPOSCHANGED,
-        WM_SIZE,
-        WM_DISPLAYCHANGE,
-        0,
+        {WM_WINDOWPOSCHANGING,  FALSE,  0},
+        {WM_WINDOWPOSCHANGED,   FALSE,  0},
+        {WM_SIZE,               FALSE,  0},
+        {WM_DISPLAYCHANGE,      FALSE,  0},
+        {0,                     FALSE,  0},
+    };
+    static const struct message exclusive_focus_loss_messages[] =
+    {
+        {WM_ACTIVATE,           TRUE,   WA_INACTIVE},
+        /*{WM_DISPLAYCHANGE,      FALSE,  0}, Not yet implemented on Wine. */
+        {WM_WINDOWPOSCHANGING,  FALSE,  0},
+        /* Like d3d8 and d3d9 ddraw seems to use SW_SHOWMINIMIZED instead of
+         * SW_MINIMIZED, causing a recursive window activation that does not
+         * produe the same result in Wine yet. Ignore the difference for now.
+         * {WM_ACTIVATE,           TRUE,   0x200000 | WA_ACTIVE}, */
+        {WM_WINDOWPOSCHANGED,   FALSE,  0},
+        {WM_MOVE,               FALSE,  0},
+        {WM_SIZE,               TRUE,   SIZE_MINIMIZED},
+        {WM_ACTIVATEAPP,        TRUE,   FALSE},
+        {0,                     FALSE,  0},
     };
 
-    static const UINT normal_messages[] =
+    static const struct message normal_messages[] =
     {
-        WM_DISPLAYCHANGE,
-        0,
+        {WM_DISPLAYCHANGE,      FALSE,  0},
+        {0,                     FALSE,  0},
     };
 
     ddraw = create_ddraw();
@@ -2438,7 +2467,7 @@ static void test_coop_level_mode_set(void)
     hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
     ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(screen_size.cx == param.ddraw_width && screen_size.cy == param.ddraw_height,
             "Expected screen size %ux%u, got %ux%u.\n",
@@ -2484,7 +2513,7 @@ static void test_coop_level_mode_set(void)
     change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
     ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(screen_size.cx == param.user32_width && screen_size.cy == param.user32_height,
             "Expected screen size %ux%u, got %ux%u.\n",
@@ -2495,6 +2524,16 @@ static void test_coop_level_mode_set(void)
             user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom,
             r.left, r.top, r.right, r.bottom);
 
+    expect_messages = exclusive_focus_loss_messages;
+    SetForegroundWindow(GetDesktopWindow());
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
+
+    ShowWindow(window, SW_RESTORE);
+    hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
+    ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
+    hr = IDirectDrawSurface_Restore(primary);
+    ok(SUCCEEDED(hr), "Surface Restore failed, hr %#x.\n", hr);
+
     PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
     expect_messages = exclusive_messages;
     screen_size.cx = 0;
@@ -2503,7 +2542,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw2_RestoreDisplayMode(ddraw);
     ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
 
-    todo_wine ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     todo_wine ok(screen_size.cx == registry_mode.dmPelsWidth
             && screen_size.cy == registry_mode.dmPelsHeight,
@@ -2589,7 +2628,7 @@ static void test_coop_level_mode_set(void)
     change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
     ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2613,7 +2652,7 @@ static void test_coop_level_mode_set(void)
     }
     ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2657,7 +2696,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw_RestoreDisplayMode(ddraw);
     ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2752,7 +2791,7 @@ static void test_coop_level_mode_set(void)
     change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
     ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2769,7 +2808,7 @@ static void test_coop_level_mode_set(void)
     hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
     ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2813,7 +2852,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw2_RestoreDisplayMode(ddraw);
     ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2874,7 +2913,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
     ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(screen_size.cx == registry_mode.dmPelsWidth
             && screen_size.cy == registry_mode.dmPelsHeight,
@@ -2945,7 +2984,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw2_SetCooperativeLevel(ddraw, window2, DDSCL_NORMAL);
     ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n",
             screen_size.cx, screen_size.cy);
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index ab03f39..fa8309d 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -391,12 +391,26 @@ static void destroy_material(IDirect3DMaterial3 *material)
     IDirect3DMaterial3_Release(material);
 }
 
-static const UINT *expect_messages;
+struct message
+{
+    UINT message;
+    BOOL check_wparam;
+    WPARAM expect_wparam;
+};
+
+static const struct message *expect_messages;
 
 static LRESULT CALLBACK test_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
 {
-    if (expect_messages && message == *expect_messages)
+    if (expect_messages && message == expect_messages->message)
+    {
+        if (expect_messages->check_wparam)
+            ok (wparam == expect_messages->expect_wparam,
+                    "Got unexpected wparam %lx for message %x, expected %lx.\n",
+                    wparam, message, expect_messages->expect_wparam);
+
         ++expect_messages;
+    }
 
     return DefWindowProcA(hwnd, message, wparam, lparam);
 }
@@ -2253,15 +2267,15 @@ static void test_wndproc(void)
     HRESULT hr;
     ULONG ref;
 
-    static const UINT messages[] =
+    static struct message messages[] =
     {
-        WM_WINDOWPOSCHANGING,
-        WM_MOVE,
-        WM_SIZE,
-        WM_WINDOWPOSCHANGING,
-        WM_ACTIVATE,
-        WM_SETFOCUS,
-        0,
+        {WM_WINDOWPOSCHANGING,  FALSE,  0},
+        {WM_MOVE,               FALSE,  0},
+        {WM_SIZE,               FALSE,  0},
+        {WM_WINDOWPOSCHANGING,  FALSE,  0},
+        {WM_ACTIVATE,           FALSE,  0},
+        {WM_SETFOCUS,           FALSE,  0},
+        {0,                     FALSE,  0},
     };
 
     /* DDSCL_EXCLUSIVE replaces the window's window proc. */
@@ -2281,7 +2295,7 @@ static void test_wndproc(void)
     expect_messages = messages;
     hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
     ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     proc = GetWindowLongPtrA(window, GWLP_WNDPROC);
     ok(proc != (LONG_PTR)test_proc, "Expected wndproc != %#lx, got %#lx.\n",
@@ -2533,19 +2547,34 @@ static void test_coop_level_mode_set(void)
     BOOL ret;
     LONG change_ret;
 
-    static const UINT exclusive_messages[] =
+    static const struct message exclusive_messages[] =
     {
-        WM_WINDOWPOSCHANGING,
-        WM_WINDOWPOSCHANGED,
-        WM_SIZE,
-        WM_DISPLAYCHANGE,
-        0,
+        {WM_WINDOWPOSCHANGING,  FALSE,  0},
+        {WM_WINDOWPOSCHANGED,   FALSE,  0},
+        {WM_SIZE,               FALSE,  0},
+        {WM_DISPLAYCHANGE,      FALSE,  0},
+        {0,                     FALSE,  0},
+    };
+    static const struct message exclusive_focus_loss_messages[] =
+    {
+        {WM_ACTIVATE,           TRUE,   WA_INACTIVE},
+        /*{WM_DISPLAYCHANGE,      FALSE,  0}, Not yet implemented on Wine. */
+        {WM_WINDOWPOSCHANGING,  FALSE,  0},
+        /* Like d3d8 and d3d9 ddraw seems to use SW_SHOWMINIMIZED instead of
+         * SW_MINIMIZED, causing a recursive window activation that does not
+         * produe the same result in Wine yet. Ignore the difference for now.
+         * {WM_ACTIVATE,           TRUE,   0x200000 | WA_ACTIVE}, */
+        {WM_WINDOWPOSCHANGED,   FALSE,  0},
+        {WM_MOVE,               FALSE,  0},
+        {WM_SIZE,               TRUE,   SIZE_MINIMIZED},
+        {WM_ACTIVATEAPP,        TRUE,   FALSE},
+        {0,                     FALSE,  0},
     };
 
-    static const UINT normal_messages[] =
+    static const struct message normal_messages[] =
     {
-        WM_DISPLAYCHANGE,
-        0,
+        {WM_DISPLAYCHANGE,      FALSE,  0},
+        {0,                     FALSE,  0},
     };
 
     ddraw = create_ddraw();
@@ -2625,7 +2654,7 @@ static void test_coop_level_mode_set(void)
     hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
     ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(screen_size.cx == param.ddraw_width && screen_size.cy == param.ddraw_height,
             "Expected screen size %ux%u, got %ux%u.\n",
@@ -2671,7 +2700,7 @@ static void test_coop_level_mode_set(void)
     change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
     ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(screen_size.cx == param.user32_width && screen_size.cy == param.user32_height,
             "Expected screen size %ux%u, got %ux%u.\n",
@@ -2682,6 +2711,16 @@ static void test_coop_level_mode_set(void)
             user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom,
             r.left, r.top, r.right, r.bottom);
 
+    expect_messages = exclusive_focus_loss_messages;
+    SetForegroundWindow(GetDesktopWindow());
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
+
+    ShowWindow(window, SW_RESTORE);
+    hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
+    ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
+    hr = IDirectDrawSurface4_Restore(primary);
+    ok(SUCCEEDED(hr), "Surface Restore failed, hr %#x.\n", hr);
+
     PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
     expect_messages = exclusive_messages;
     screen_size.cx = 0;
@@ -2690,7 +2729,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw4_RestoreDisplayMode(ddraw);
     ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
 
-    todo_wine ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     todo_wine ok(screen_size.cx == registry_mode.dmPelsWidth
             && screen_size.cy == registry_mode.dmPelsHeight,
@@ -2776,7 +2815,7 @@ static void test_coop_level_mode_set(void)
     change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
     ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2793,7 +2832,7 @@ static void test_coop_level_mode_set(void)
     hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
     ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2837,7 +2876,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw4_RestoreDisplayMode(ddraw);
     ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2932,7 +2971,7 @@ static void test_coop_level_mode_set(void)
     change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
     ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2949,7 +2988,7 @@ static void test_coop_level_mode_set(void)
     hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
     ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2993,7 +3032,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw4_RestoreDisplayMode(ddraw);
     ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -3054,7 +3093,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
     ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(screen_size.cx == registry_mode.dmPelsWidth
             && screen_size.cy == registry_mode.dmPelsHeight,
@@ -3125,7 +3164,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw4_SetCooperativeLevel(ddraw, window2, DDSCL_NORMAL);
     ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n",
             screen_size.cx, screen_size.cy);
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index f505c65..adbecc2 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -324,12 +324,26 @@ static IDirect3DDevice7 *create_device(HWND window, DWORD coop_level)
     return device;
 }
 
-static const UINT *expect_messages;
+struct message
+{
+    UINT message;
+    BOOL check_wparam;
+    WPARAM expect_wparam;
+};
+
+static const struct message *expect_messages;
 
 static LRESULT CALLBACK test_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
 {
-    if (expect_messages && message == *expect_messages)
+    if (expect_messages && message == expect_messages->message)
+    {
+        if (expect_messages->check_wparam)
+            ok (wparam == expect_messages->expect_wparam,
+                    "Got unexpected wparam %lx for message %x, expected %lx.\n",
+                    wparam, message, expect_messages->expect_wparam);
+
         ++expect_messages;
+    }
 
     return DefWindowProcA(hwnd, message, wparam, lparam);
 }
@@ -1931,15 +1945,15 @@ static void test_wndproc(void)
     HRESULT hr;
     ULONG ref;
 
-    static const UINT messages[] =
+    static struct message messages[] =
     {
-        WM_WINDOWPOSCHANGING,
-        WM_MOVE,
-        WM_SIZE,
-        WM_WINDOWPOSCHANGING,
-        WM_ACTIVATE,
-        WM_SETFOCUS,
-        0,
+        {WM_WINDOWPOSCHANGING,  FALSE,  0},
+        {WM_MOVE,               FALSE,  0},
+        {WM_SIZE,               FALSE,  0},
+        {WM_WINDOWPOSCHANGING,  FALSE,  0},
+        {WM_ACTIVATE,           FALSE,  0},
+        {WM_SETFOCUS,           FALSE,  0},
+        {0,                     FALSE,  0},
     };
 
     /* DDSCL_EXCLUSIVE replaces the window's window proc. */
@@ -1959,7 +1973,7 @@ static void test_wndproc(void)
     expect_messages = messages;
     hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
     ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     proc = GetWindowLongPtrA(window, GWLP_WNDPROC);
     ok(proc != (LONG_PTR)test_proc, "Expected wndproc != %#lx, got %#lx.\n",
@@ -2210,19 +2224,34 @@ static void test_coop_level_mode_set(void)
     BOOL ret;
     LONG change_ret;
 
-    static const UINT exclusive_messages[] =
+    static const struct message exclusive_messages[] =
     {
-        WM_WINDOWPOSCHANGING,
-        WM_WINDOWPOSCHANGED,
-        WM_SIZE,
-        WM_DISPLAYCHANGE,
-        0,
+        {WM_WINDOWPOSCHANGING,  FALSE,  0},
+        {WM_WINDOWPOSCHANGED,   FALSE,  0},
+        {WM_SIZE,               FALSE,  0},
+        {WM_DISPLAYCHANGE,      FALSE,  0},
+        {0,                     FALSE,  0},
+    };
+    static const struct message exclusive_focus_loss_messages[] =
+    {
+        {WM_ACTIVATE,           TRUE,   WA_INACTIVE},
+        /*{WM_DISPLAYCHANGE,      FALSE,  0}, Not yet implemented on Wine. */
+        {WM_WINDOWPOSCHANGING,  FALSE,  0},
+        /* Like d3d8 and d3d9 ddraw seems to use SW_SHOWMINIMIZED instead of
+         * SW_MINIMIZED, causing a recursive window activation that does not
+         * produe the same result in Wine yet. Ignore the difference for now.
+         * {WM_ACTIVATE,           TRUE,   0x200000 | WA_ACTIVE}, */
+        {WM_WINDOWPOSCHANGED,   FALSE,  0},
+        {WM_MOVE,               FALSE,  0},
+        {WM_SIZE,               TRUE,   SIZE_MINIMIZED},
+        {WM_ACTIVATEAPP,        TRUE,   FALSE},
+        {0,                     FALSE,  0},
     };
 
-    static const UINT normal_messages[] =
+    static const struct message normal_messages[] =
     {
-        WM_DISPLAYCHANGE,
-        0,
+        {WM_DISPLAYCHANGE,      FALSE,  0},
+        {0,                     FALSE,  0},
     };
 
     ddraw = create_ddraw();
@@ -2302,7 +2331,7 @@ static void test_coop_level_mode_set(void)
     hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
     ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(screen_size.cx == param.ddraw_width && screen_size.cy == param.ddraw_height,
             "Expected screen size %ux%u, got %ux%u.\n",
@@ -2348,7 +2377,7 @@ static void test_coop_level_mode_set(void)
     change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
     ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(screen_size.cx == param.user32_width && screen_size.cy == param.user32_height,
             "Expected screen size %ux%u, got %ux%u.\n",
@@ -2359,6 +2388,16 @@ static void test_coop_level_mode_set(void)
             user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom,
             r.left, r.top, r.right, r.bottom);
 
+    expect_messages = exclusive_focus_loss_messages;
+    SetForegroundWindow(GetDesktopWindow());
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
+
+    ShowWindow(window, SW_RESTORE);
+    hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
+    ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
+    hr = IDirectDrawSurface7_Restore(primary);
+    ok(SUCCEEDED(hr), "Surface Restore failed, hr %#x.\n", hr);
+
     PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
     expect_messages = exclusive_messages;
     screen_size.cx = 0;
@@ -2367,7 +2406,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw7_RestoreDisplayMode(ddraw);
     ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
 
-    todo_wine ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    todo_wine ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     todo_wine ok(screen_size.cx == registry_mode.dmPelsWidth
             && screen_size.cy == registry_mode.dmPelsHeight,
@@ -2453,7 +2492,7 @@ static void test_coop_level_mode_set(void)
     change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
     ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2470,7 +2509,7 @@ static void test_coop_level_mode_set(void)
     hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
     ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2514,7 +2553,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw_RestoreDisplayMode(ddraw);
     ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2609,7 +2648,7 @@ static void test_coop_level_mode_set(void)
     change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
     ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2626,7 +2665,7 @@ static void test_coop_level_mode_set(void)
     hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
     ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2670,7 +2709,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw7_RestoreDisplayMode(ddraw);
     ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
 
@@ -2731,7 +2770,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
     ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(screen_size.cx == registry_mode.dmPelsWidth
             && screen_size.cy == registry_mode.dmPelsHeight,
@@ -2802,7 +2841,7 @@ static void test_coop_level_mode_set(void)
     hr = IDirectDraw7_SetCooperativeLevel(ddraw, window2, DDSCL_NORMAL);
     ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
 
-    ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
+    ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
     expect_messages = NULL;
     ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n",
             screen_size.cx, screen_size.cy);
-- 
2.0.4




More information about the wine-patches mailing list