[PATCH 4/6] user32/tests: Add test for a window that doesn't want to be deactivated
Gabriel Ivăncescu
gabrielopcode at gmail.com
Mon Dec 17 05:49:38 CST 2018
On Windows, if WM_NCACTIVATE returns FALSE, the window doesn't get
deactivated.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/user32/tests/win.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index 94eff5e..83ba1de 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -899,6 +899,17 @@ static LRESULT WINAPI tool_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPAR
return DefWindowProcA(hwnd, msg, wparam, lparam);
}
+static LRESULT WINAPI no_deactivation_procA(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+ switch (msg)
+ {
+ case WM_NCACTIVATE:
+ DefWindowProcA(hwnd, msg, wparam, lparam);
+ return FALSE;
+ }
+ 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)
@@ -3160,6 +3171,18 @@ static void test_SetActiveWindow(HWND hwnd)
check_active_state(hwnd, hwnd, hwnd);
}
DestroyWindow(hwnd2);
+
+ /* a window can disallow being deactivated by returning FALSE from WM_NCACTIVATE */
+ 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 No Deactivation window: 0x%08x\n", GetLastError());
+ SetWindowLongPtrA(hwnd2, GWLP_WNDPROC, (LONG_PTR)no_deactivation_procA);
+
+ SetActiveWindow(hwnd2);
+ check_wnd_state(hwnd2, hwnd2, hwnd2, 0);
+ SetActiveWindow(hwnd);
+ check_wnd_state(hwnd2, hwnd2, hwnd2, 0);
+ DestroyWindow(hwnd2);
}
struct create_window_thread_params
--
2.19.1
More information about the wine-devel
mailing list