[PATCH 1/2] user32/tests: Test clicking taskbar icons of minimized windows.
Zhiyi Zhang
zzhang at codeweavers.com
Tue Feb 22 01:31:52 CST 2022
When a minimized window doesn't handle WM_SYSCOMMAND SC_RESTORE messages, the window should remain
minimized when its taskbar icon gets clicked.
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
---
dlls/user32/tests/msg.c | 77 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 77 insertions(+)
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index f0e0d0fba76..3c4cb084d8e 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -18735,6 +18735,82 @@ static void test_button_style(void)
}
}
+static BOOL sc_restore_received;
+
+static LRESULT CALLBACK test_taskbar_msg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
+{
+ if (msg == WM_SYSCOMMAND && wp == SC_RESTORE)
+ {
+ sc_restore_received = TRUE;
+ return 0;
+ }
+
+ return DefWindowProcA(hwnd, msg, wp, lp);
+}
+
+static void test_taskbar_messages(void)
+{
+ HWND hwnd, background;
+ int timeout = 0;
+ COLORREF color;
+ WNDCLASSA cls;
+ HDC hdc;
+
+ if (!winetest_interactive)
+ return;
+
+ memset(&cls, 0, sizeof(cls));
+ cls.lpfnWndProc = DefWindowProcA;
+ cls.hInstance = GetModuleHandleA(NULL);
+ cls.hCursor = LoadCursorA(NULL, (LPSTR)IDC_ARROW);
+ cls.hbrBackground = GetStockObject(WHITE_BRUSH);
+ cls.lpszClassName = "test_taskbar_background_class";
+ RegisterClassA(&cls);
+
+ cls.lpfnWndProc = test_taskbar_msg_proc;
+ cls.hbrBackground = GetStockObject(GRAY_BRUSH);
+ cls.lpszClassName = "test_taskbar_class";
+ RegisterClassA(&cls);
+
+ background = CreateWindowA("test_taskbar_background_class", "background", WS_POPUP | WS_VISIBLE,
+ 100, 100, 200, 200, NULL, NULL, NULL, NULL);
+ ok(background != NULL, "CreateWindowA failed, error %d.\n", GetLastError());
+ hwnd = CreateWindowA("test_taskbar_class", "test", WS_POPUP, 100, 100, 200, 200, NULL, NULL, NULL,
+ NULL);
+ ok(hwnd != NULL, "CreateWindowA failed, error %d.\n", GetLastError());
+ ShowWindow(hwnd, SW_SHOWMINIMIZED);
+ flush_events();
+
+ trace("Click the taskbar icon of the test window within 5 seconds.\n");
+ while (!sc_restore_received && timeout < 5000)
+ {
+ flush_events();
+ timeout += 200;
+ }
+ ok(timeout < 5000 && sc_restore_received, "Didn't receive clicks on the taskbar icon.\n");
+
+ /* Desktop pixels may take a while to update */
+ timeout = 0;
+ hdc = GetDC(0);
+ color = GetPixel(hdc, 150, 150);
+ while (color != 0xffffff && timeout < 1000)
+ {
+ flush_events();
+ timeout += 200;
+ color = GetPixel(hdc, 150, 150);
+ }
+ /* The background window rectangle is (100, 100, 200, 200). If hwnd gets unminimized, it will
+ * end up obscuring the background window. */
+ todo_wine_if(color != 0xffffff)
+ ok(color == 0xffffff, "Expected color %#x, got %#x.\n", 0xffffff, color);
+
+ ReleaseDC(0, hdc);
+ DestroyWindow(hwnd);
+ DestroyWindow(background);
+ UnregisterClassA("test_taskbar_class", GetModuleHandleA(NULL));
+ UnregisterClassA("test_taskbar_background_class", GetModuleHandleA(NULL));
+}
+
START_TEST(msg)
{
char **test_argv;
@@ -18860,6 +18936,7 @@ START_TEST(msg)
test_TrackPopupMenu();
test_TrackPopupMenuEmpty();
test_DoubleSetCapture();
+ test_taskbar_messages();
/* keep it the last test, under Windows it tends to break the tests
* which rely on active/foreground windows being correct.
*/
--
2.32.0
More information about the wine-devel
mailing list