From: Drew Ronneberg Subject: [PATCH 1/2] Add tests for calling ShowWindow(SW_HIDE) on a hidden window. Message-Id: <348756995.2537482.1416404094649.JavaMail.yahoo@jws10649.mail.bf1.yahoo.com> Date: Wed, 19 Nov 2014 13:34:54 +0000 (UTC)

From 803a835395d1535bdfc6fdf7fdd41dfd41cf5558 Mon Sep 17 00:00:00 2001 From: Drew Ronneberg Date: Tue, 18 Nov 2014 22:14:21 -0500 Subject: [PATCH 1/2] Add tests for calling ShowWindow(SW_HIDE) on a hidden window. The multi-threaded test currently hangs on wine but passes on Windows. It shows that ShowWindow(SW_HIDE) does not call SendMessage(SW_HIDE). --- dlls/user32/tests/msg.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c index 9b7453f..d829c5f 100644 --- a/dlls/user32/tests/msg.c +++ b/dlls/user32/tests/msg.c @@ -4621,9 +4621,21 @@ static void test_MsgWaitForMultipleObjects(HWND hwnd) ok(ret == WAIT_IO_COMPLETION, "MsgWaitForMultipleObjectsEx returned %x\n", ret); } +static DWORD CALLBACK show_window_thread(LPVOID arg) +{ + HWND hwnd = arg; + + /* function will not return if ShowWindow(SW_HIDE) calls SendMessage() */ + ShowWindow(hwnd, SW_HIDE); + + return 0; +} + /* test if we receive the right sequence of messages */ static void test_messages(void) { + DWORD tid; + HANDLE hthread; HWND hwnd, hparent, hchild; HWND hchild2, hbutton; HMENU hmenu; @@ -4656,6 +4668,22 @@ static void test_messages(void) flush_events(); ok_sequence(WmHideOverlappedSeq, "ShowWindow(SW_HIDE):overlapped", FALSE); + /* test ShowWindow(SW_HIDE) on a hidden window - single threaded */ + ShowWindow(hwnd, SW_HIDE); + flush_events(); + ok_sequence(WmEmptySeq, "ShowWindow(SW_HIDE):overlapped", FALSE); + + if (0) + { + /* test ShowWindow(SW_HIDE) on a hidden window - multi-threaded */ + hthread = CreateThread(NULL, 0, show_window_thread, hwnd, 0, &tid); + ok(hthread != NULL, "CreateThread failed, error %d\n", GetLastError()); + ok(WaitForSingleObject(hthread, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n"); + CloseHandle(hthread); + flush_events(); + ok_sequence(WmEmptySeq, "ShowWindow(SW_HIDE):overlapped", FALSE); + } + ShowWindow(hwnd, SW_SHOW); flush_events(); ok_sequence(WmShowOverlappedSeq, "ShowWindow(SW_SHOW):overlapped", TRUE); -- 1.9.1