=?UTF-8?Q?Stefan=20D=C3=B6singer=20?=: ddraw/tests: Test when the device goes bad on focus loss.
Alexandre Julliard
julliard at winehq.org
Mon Oct 15 16:15:28 CDT 2018
Module: wine
Branch: master
Commit: d02b4581b5cfbf3cc6d5313d0c4ddc071f93a6a3
URL: https://source.winehq.org/git/wine.git/?a=commit;h=d02b4581b5cfbf3cc6d5313d0c4ddc071f93a6a3
Author: Stefan Dösinger <stefan at codeweavers.com>
Date: Sat Oct 13 16:13:53 2018 -0700
ddraw/tests: Test when the device goes bad on focus loss.
Signed-off-by: Stefan Dösinger <stefan at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ddraw/tests/ddraw4.c | 38 ++++++++++++++++++++++++++------------
dlls/ddraw/tests/ddraw7.c | 38 ++++++++++++++++++++++++++------------
2 files changed, 52 insertions(+), 24 deletions(-)
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index 7cf61ce..3aae425 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -532,12 +532,16 @@ struct message
UINT message;
BOOL check_wparam;
WPARAM expect_wparam;
+ HRESULT ddraw_state;
};
static const struct message *expect_messages;
+static IDirectDraw4 *focus_test_ddraw;
static LRESULT CALLBACK test_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
+ HRESULT hr;
+
if (expect_messages && message == expect_messages->message)
{
if (expect_messages->check_wparam)
@@ -545,6 +549,13 @@ static LRESULT CALLBACK test_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM
"Got unexpected wparam %lx for message %x, expected %lx.\n",
wparam, message, expect_messages->expect_wparam);
+ if (focus_test_ddraw)
+ {
+ hr = IDirectDraw4_TestCooperativeLevel(focus_test_ddraw);
+ ok(hr == expect_messages->ddraw_state, "Got ddraw state %#x on message %#x, expected %#x.\n",
+ hr, message, expect_messages->ddraw_state);
+ }
+
++expect_messages;
}
@@ -2712,22 +2723,22 @@ static void test_coop_level_mode_set(void)
};
static const struct message exclusive_focus_loss_messages[] =
{
- {WM_ACTIVATE, TRUE, WA_INACTIVE},
- {WM_WINDOWPOSCHANGING, FALSE, 0}, /* Window resize due to mode change. */
- {WM_WINDOWPOSCHANGED, FALSE, 0},
- {WM_SIZE, TRUE, SIZE_RESTORED}, /* Generated by DefWindowProc. */
- {WM_DISPLAYCHANGE, FALSE, 0},
- {WM_KILLFOCUS, FALSE, 0},
- {WM_WINDOWPOSCHANGING, FALSE, 0}, /* Window minimized. */
+ {WM_ACTIVATE, TRUE, WA_INACTIVE, DD_OK},
+ {WM_WINDOWPOSCHANGING, FALSE, 0, DD_OK}, /* Window resize due to mode change. */
+ {WM_WINDOWPOSCHANGED, FALSE, 0, DD_OK},
+ {WM_SIZE, TRUE, SIZE_RESTORED, DD_OK}, /* Generated by DefWindowProc. */
+ {WM_DISPLAYCHANGE, FALSE, 0, DD_OK},
+ {WM_KILLFOCUS, FALSE, 0, DDERR_NOEXCLUSIVEMODE},
+ {WM_WINDOWPOSCHANGING, FALSE, 0, DDERR_NOEXCLUSIVEMODE}, /* Window minimized. */
/* Like d3d8 and d3d9 ddraw seems to use SW_SHOWMINIMIZED instead of
* SW_MINIMIZED, causing a recursive window activation that does not
* produce 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},
+ {WM_WINDOWPOSCHANGED, FALSE, 0, DDERR_NOEXCLUSIVEMODE},
+ {WM_MOVE, FALSE, 0, DDERR_NOEXCLUSIVEMODE},
+ {WM_SIZE, TRUE, SIZE_MINIMIZED, DDERR_NOEXCLUSIVEMODE},
+ {WM_ACTIVATEAPP, TRUE, FALSE, DDERR_NOEXCLUSIVEMODE},
+ {0, FALSE, 0, 0},
};
static const struct message exclusive_focus_restore_messages[] =
{
@@ -2912,9 +2923,12 @@ static void test_coop_level_mode_set(void)
wine_dbgstr_rect(&r));
expect_messages = exclusive_focus_loss_messages;
+ focus_test_ddraw = ddraw;
ret = SetForegroundWindow(GetDesktopWindow());
ok(ret, "Failed to set foreground window.\n");
ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
+ focus_test_ddraw = NULL;
+
memset(&devmode, 0, sizeof(devmode));
devmode.dmSize = sizeof(devmode);
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode);
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index 6ae4207..4691135 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -448,12 +448,16 @@ struct message
UINT message;
BOOL check_wparam;
WPARAM expect_wparam;
+ HRESULT ddraw_state;
};
static const struct message *expect_messages;
+static IDirectDraw7 *focus_test_ddraw;
static LRESULT CALLBACK test_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
+ HRESULT hr;
+
if (expect_messages && message == expect_messages->message)
{
if (expect_messages->check_wparam)
@@ -461,6 +465,13 @@ static LRESULT CALLBACK test_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM
"Got unexpected wparam %lx for message %x, expected %lx.\n",
wparam, message, expect_messages->expect_wparam);
+ if (focus_test_ddraw)
+ {
+ hr = IDirectDraw7_TestCooperativeLevel(focus_test_ddraw);
+ ok(hr == expect_messages->ddraw_state, "Got ddraw state %#x on message %#x, expected %#x.\n",
+ hr, message, expect_messages->ddraw_state);
+ }
+
++expect_messages;
}
@@ -2441,22 +2452,22 @@ static void test_coop_level_mode_set(void)
};
static const struct message exclusive_focus_loss_messages[] =
{
- {WM_ACTIVATE, TRUE, WA_INACTIVE},
- {WM_WINDOWPOSCHANGING, FALSE, 0}, /* Window resize due to mode change. */
- {WM_WINDOWPOSCHANGED, FALSE, 0},
- {WM_SIZE, TRUE, SIZE_RESTORED}, /* Generated by DefWindowProc. */
- {WM_DISPLAYCHANGE, FALSE, 0},
- {WM_KILLFOCUS, FALSE, 0},
- {WM_WINDOWPOSCHANGING, FALSE, 0}, /* Window minimized. */
+ {WM_ACTIVATE, TRUE, WA_INACTIVE, DD_OK},
+ {WM_WINDOWPOSCHANGING, FALSE, 0, DD_OK}, /* Window resize due to mode change. */
+ {WM_WINDOWPOSCHANGED, FALSE, 0, DD_OK},
+ {WM_SIZE, TRUE, SIZE_RESTORED, DD_OK}, /* Generated by DefWindowProc. */
+ {WM_DISPLAYCHANGE, FALSE, 0, DD_OK},
+ {WM_KILLFOCUS, FALSE, 0, DDERR_NOEXCLUSIVEMODE},
+ {WM_WINDOWPOSCHANGING, FALSE, 0, DDERR_NOEXCLUSIVEMODE}, /* Window minimized. */
/* Like d3d8 and d3d9 ddraw seems to use SW_SHOWMINIMIZED instead of
* SW_MINIMIZED, causing a recursive window activation that does not
* produce 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},
+ {WM_WINDOWPOSCHANGED, FALSE, 0, DDERR_NOEXCLUSIVEMODE},
+ {WM_MOVE, FALSE, 0, DDERR_NOEXCLUSIVEMODE},
+ {WM_SIZE, TRUE, SIZE_MINIMIZED, DDERR_NOEXCLUSIVEMODE},
+ {WM_ACTIVATEAPP, TRUE, FALSE, DDERR_NOEXCLUSIVEMODE},
+ {0, FALSE, 0, 0},
};
static const struct message exclusive_focus_restore_messages[] =
{
@@ -2641,9 +2652,12 @@ static void test_coop_level_mode_set(void)
wine_dbgstr_rect(&r));
expect_messages = exclusive_focus_loss_messages;
+ focus_test_ddraw = ddraw;
ret = SetForegroundWindow(GetDesktopWindow());
ok(ret, "Failed to set foreground window.\n");
ok(!expect_messages->message, "Expected message %#x, but didn't receive it.\n", expect_messages->message);
+ focus_test_ddraw = NULL;
+
memset(&devmode, 0, sizeof(devmode));
devmode.dmSize = sizeof(devmode);
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode);
More information about the wine-cvs
mailing list