Module: wine Branch: master Commit: 1437317819ca6be7a5914209722c003ef056f7f7 URL: https://source.winehq.org/git/wine.git/?a=commit;h=1437317819ca6be7a59142097...
Author: Stefan Dösinger stefan@codeweavers.com Date: Mon Dec 18 21:39:28 2017 +0100
d3d9/tests: Work around focus-follows-mouse test failures.
Removing WS_VISIBLE without updating the window state with SWP_FRAMECHANGED is enough to trigger d3d9's hidden window codepath (native and in Wine), but doesn't actually hide the window. This prevents unpredictable focus changes on focus follows mouse WMs.
Signed-off-by: Stefan Dösinger stefan@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/d3d9/tests/d3d9ex.c | 6 +++++- dlls/d3d9/tests/device.c | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d9/tests/d3d9ex.c b/dlls/d3d9/tests/d3d9ex.c index 0e43a19..1a3af32 100644 --- a/dlls/d3d9/tests/d3d9ex.c +++ b/dlls/d3d9/tests/d3d9ex.c @@ -2954,7 +2954,11 @@ static void test_wndproc(void) hr = reset_device(device, &device_desc); ok(SUCCEEDED(hr), "Failed to reset device, hr %#x.\n", hr);
- ShowWindow(device_window, SW_HIDE); + /* Remove the WS_VISIBLE flag to test hidden windows. This is enough to trigger d3d's hidden + * window codepath, but does not actually hide the window without a SetWindowPos(SWP_FRAMECHANGED) + * call. This way we avoid focus changes and random failures on focus follows mouse WMs. */ + device_style = GetWindowLongA(device_window, GWL_STYLE); + SetWindowLongA(device_window, GWL_STYLE, device_style & ~WS_VISIBLE); flush_events();
expect_messages = focus_loss_messages_hidden; diff --git a/dlls/d3d9/tests/device.c b/dlls/d3d9/tests/device.c index 1a226ec..a9fd4e4 100644 --- a/dlls/d3d9/tests/device.c +++ b/dlls/d3d9/tests/device.c @@ -3906,7 +3906,11 @@ static void test_wndproc(void) hr = reset_device(device, &device_desc); ok(SUCCEEDED(hr), "Failed to reset device, hr %#x.\n", hr);
- ShowWindow(device_window, SW_HIDE); + /* Remove the WS_VISIBLE flag to test hidden windows. This is enough to trigger d3d's hidden + * window codepath, but does not actually hide the window without a SetWindowPos(SWP_FRAMECHANGED) + * call. This way we avoid focus changes and random failures on focus follows mouse WMs. */ + device_style = GetWindowLongA(device_window, GWL_STYLE); + SetWindowLongA(device_window, GWL_STYLE, device_style & ~WS_VISIBLE); flush_events();
expect_messages = focus_loss_messages_hidden;