[PATCH resend 6/6] user32/tests: Test changing activation from within WM_ACTIVATE's WA_INACTIVE message

Gabriel Ivăncescu gabrielopcode at gmail.com
Wed Mar 13 08:13:00 CDT 2019


Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
 dlls/user32/tests/win.c | 31 ++++++++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index e839d86..209161e 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -910,6 +910,17 @@ static LRESULT WINAPI no_deactivation_procA(HWND hwnd, UINT msg, WPARAM wparam,
     return DefWindowProcA(hwnd, msg, wparam, lparam);
 }
 
+static LRESULT WINAPI change_activation_from_wa_inactive_procA(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+    switch (msg)
+    {
+        case WM_ACTIVATE:
+            if (LOWORD(wparam) == WA_INACTIVE)
+                SetActiveWindow((HWND)GetWindowLongPtrA(hwnd, GWLP_USERDATA));
+    }
+    return DefWindowProcA(hwnd, msg, wparam, lparam);
+}
+
 static const WCHAR mainclassW[] = {'M','a','i','n','W','i','n','d','o','w','C','l','a','s','s','W',0};
 
 static BOOL RegisterWindowClasses(void)
@@ -3137,7 +3148,7 @@ todo_wine
 
 static void test_SetActiveWindow(HWND hwnd)
 {
-    HWND hwnd2, ret;
+    HWND hwnd2, hwnd3, ret;
 
     flush_events( TRUE );
     ShowWindow(hwnd, SW_HIDE);
@@ -3228,6 +3239,24 @@ static void test_SetActiveWindow(HWND hwnd)
     SetActiveWindow(hwnd);
     check_wnd_state(hwnd2, hwnd2, hwnd2, 0);
     DestroyWindow(hwnd2);
+
+    /* changing the activated window from within WM_ACTIVATE's WA_INACTIVE should work */
+    hwnd2 = CreateWindowExA(0, "MainWindowClass", "No Deactivation window", WS_OVERLAPPED | WS_VISIBLE,
+                            10, 10, 50, 50, hwnd, 0, GetModuleHandleA(NULL), NULL);
+    ok(hwnd2 != NULL, "failed to create window: 0x%08x\n", GetLastError());
+    hwnd3 = CreateWindowExA(0, "MainWindowClass", "No Deactivation window", WS_OVERLAPPED | WS_VISIBLE,
+                            70, 70, 50, 50, hwnd, 0, GetModuleHandleA(NULL), NULL);
+    ok(hwnd3 != NULL, "failed to create window: 0x%08x\n", GetLastError());
+
+    SetActiveWindow(hwnd2);
+    check_wnd_state(hwnd2, hwnd2, hwnd2, 0);
+    SetWindowLongPtrA(hwnd2, GWLP_USERDATA, (LONG_PTR)hwnd3);
+    SetWindowLongPtrA(hwnd2, GWLP_WNDPROC,  (LONG_PTR)change_activation_from_wa_inactive_procA);
+    SetActiveWindow(hwnd);
+    check_wnd_state(hwnd3, hwnd3, hwnd3, 0);
+
+    DestroyWindow(hwnd2);
+    DestroyWindow(hwnd3);
 }
 
 struct create_window_thread_params
-- 
2.20.1




More information about the wine-devel mailing list