diff --git a/dlls/user/tests/msg.c b/dlls/user/tests/msg.c index 63114b64fde..33c2319bb87 100644 --- a/dlls/user/tests/msg.c +++ b/dlls/user/tests/msg.c @@ -145,6 +145,10 @@ static const struct message WmHideOverlappedSeq[] = { { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, { 0 } }; +/* ShowWindow(SW_HIDE) for an invisible overlapped window */ +static const struct message WmHideInvisibleOverlappedSeq[] = { + { 0 } +}; /* DestroyWindow for a visible overlapped window */ static const struct message WmDestroyOverlappedSeq[] = { { HCBT_DESTROYWND, hook }, @@ -756,6 +760,10 @@ static void test_messages(void) ok (hwnd != 0, "Failed to create overlapped window\n"); ok_sequence(WmCreateOverlappedSeq, "CreateWindow:overlapped"); + /* test ShowWindow(SW_HIDE) on a newly created invisible window */ + ok( ShowWindow(hwnd, SW_HIDE) == FALSE, "ShowWindow: window was visible\n" ); + ok_sequence(WmHideInvisibleOverlappedSeq, "ShowWindow(SW_HIDE):overlapped, invisible"); + /* test WM_SETREDRAW on a not visible top level window */ test_WM_SETREDRAW(hwnd); diff --git a/dlls/x11drv/winpos.c b/dlls/x11drv/winpos.c index 36658808eee..bd205d1608a 100644 --- a/dlls/x11drv/winpos.c +++ b/dlls/x11drv/winpos.c @@ -1283,6 +1283,7 @@ BOOL X11DRV_ShowWindow( HWND hwnd, INT cmd ) switch(cmd) { case SW_HIDE: + if (!wasVisible) goto END; swp |= SWP_HIDEWINDOW | SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER; break;