user/test: Tests for broken behavior of ShowWindow for maximized
popup windows
Vitaliy Margolen
wine-patch at kievinfo.com
Fri Oct 14 12:05:39 CDT 2005
Vitaliy Margolen
changelog:
user/test:
- Tests for broken behavior of ShowWindow for maximized popup windows.
-------------- next part --------------
Index: dlls/user/tests/msg.c
===================================================================
RCS file: /home/wine/wine/dlls/user/tests/msg.c,v
retrieving revision 1.93
diff -u -p -r1.93 msg.c
--- dlls/user/tests/msg.c 28 Sep 2005 18:11:10 -0000 1.93
+++ dlls/user/tests/msg.c 14 Oct 2005 17:05:11 -0000
@@ -343,6 +343,98 @@ static const struct message WmDestroyOve
{ WM_NCDESTROY, sent },
{ 0 }
};
+/* CreateWindow(WS_MAXIMAZE|WS_VISIBLE) for popup window */
+static const struct message WmCreateMaxPopupSeq[] = {
+ { HCBT_CREATEWND, hook },
+ { WM_NCCREATE, sent },
+ { WM_NCCALCSIZE, sent|wparam, 0 },
+ { WM_CREATE, sent },
+ { WM_SIZE, sent },
+ { WM_MOVE, sent },
+ { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE },
+ { WM_GETMINMAXINFO, sent },
+ { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE|SWP_FRAMECHANGED|0x8000 },
+ { WM_NCCALCSIZE, sent|wparam, TRUE },
+ { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOREDRAW|SWP_NOZORDER|0x8000 },
+ { WM_MOVE, sent|defwinproc },
+ { WM_SIZE, sent|defwinproc },
+ { WM_SHOWWINDOW, sent|wparam, 1 },
+ { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE },
+ { HCBT_ACTIVATE, hook },
+ /* Wine does not send this message for focus changes */
+ { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE },
+ { WM_ACTIVATEAPP, sent|wparam, 1 },
+ { WM_NCACTIVATE, sent|wparam, 1 },
+ { WM_ACTIVATE, sent|wparam, 1 },
+ { HCBT_SETFOCUS, hook },
+ { WM_SETFOCUS, sent|wparam|defwinproc, 0 },
+ { WM_SYNCPAINT, sent|wparam|optional, 4 },
+ { WM_NCPAINT, sent|wparam|defwinproc|optional, 1 },
+ { WM_ERASEBKGND, sent|defwinproc|optional },
+ { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOCLIENTMOVE|SWP_NOCLIENTSIZE|SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOZORDER|SWP_NOSIZE },
+ { 0 }
+};
+/* CreateWindow(WS_MAXIMAZE) for popup window, not initially visible */
+static const struct message WmCreateInvisibleMaxPopupSeq[] = {
+ { HCBT_CREATEWND, hook },
+ { WM_NCCREATE, sent },
+ { WM_NCCALCSIZE, sent|wparam, 0 },
+ { WM_CREATE, sent },
+ { WM_SIZE, sent },
+ { WM_MOVE, sent },
+ { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE },
+ { WM_GETMINMAXINFO, sent },
+ { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE|SWP_FRAMECHANGED|0x8000 },
+ { WM_NCCALCSIZE, sent|wparam, TRUE },
+ { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOREDRAW|SWP_NOZORDER|0x8000 },
+ { WM_MOVE, sent|defwinproc },
+ { WM_SIZE, sent|defwinproc },
+ { 0 }
+};
+/* ShowWindow(SW_SHOWMAXIMIZED) for a resized not visible popup window */
+static const struct message WmShowMaxPopupResizedSeq[] = {
+ { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE },
+ { WM_GETMINMAXINFO, sent },
+ { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED },
+ { WM_NCCALCSIZE, sent|wparam, TRUE },
+ { HCBT_ACTIVATE, hook },
+ { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 },
+ /* Wine does not send this message for focus changes */
+ { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE },
+ { WM_ACTIVATEAPP, sent|wparam, 1 },
+ { WM_NCACTIVATE, sent|wparam, 1 },
+ { WM_ACTIVATE, sent|wparam, 1 },
+ { HCBT_SETFOCUS, hook },
+ { WM_SETFOCUS, sent|wparam|defwinproc, 0 },
+ { WM_NCPAINT, sent|wparam|optional, 1 },
+ { WM_ERASEBKGND, sent|optional },
+ { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOCLIENTMOVE|SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOMOVE|SWP_NOZORDER },
+ /* WinNT4.0 sends WM_MOVE */
+ { WM_MOVE, sent|defwinproc|optional },
+ { WM_SIZE, sent|defwinproc },
+ { 0 }
+};
+/* ShowWindow(SW_SHOWMAXIMIZED) for a not visible popup window */
+static const struct message WmShowMaxPopupSeq[] = {
+ { HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE },
+ { WM_GETMINMAXINFO, sent },
+ { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED },
+ { WM_NCCALCSIZE, sent|wparam, TRUE },
+ { HCBT_ACTIVATE, hook },
+ { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 },
+ /* Wine does not send this message for focus changes */
+ { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE },
+ { WM_ACTIVATEAPP, sent|wparam, 1 },
+ { WM_NCACTIVATE, sent|wparam, 1 },
+ { WM_ACTIVATE, sent|wparam, 1 },
+ { HCBT_SETFOCUS, hook },
+ { WM_SETFOCUS, sent|wparam|defwinproc, 0 },
+ { WM_SYNCPAINT, sent|wparam|optional, 4 },
+ { WM_NCPAINT, sent|wparam|defwinproc|optional, 1 },
+ { WM_ERASEBKGND, sent|defwinproc|optional },
+ { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER },
+ { 0 }
+};
/* CreateWindow (for a child popup window, not initially visible) */
static const struct message WmCreateChildPopupSeq[] = {
{ HCBT_CREATEWND, hook },
@@ -2824,6 +2916,7 @@ static void test_scroll_messages(HWND hw
static void test_showwindow(void)
{
HWND hwnd, hchild;
+ RECT rc;
hwnd = CreateWindowExA(0, "TestWindowClass", "Test overlapped", WS_OVERLAPPEDWINDOW,
100, 100, 200, 200, 0, 0, 0, NULL);
@@ -2883,6 +2976,73 @@ static void test_showwindow(void)
DestroyWindow(hwnd);
flush_sequence();
+
+ /* Now onto popup windows */
+ /* Test 1:
+ * 1. Create invisible maximized popup window.
+ * 2. Move and resize it.
+ * 3. Show it maximized.
+ */
+ trace("calling CreateWindowExA( WS_MAXIMIZE ) for invisible maximized popup window\n");
+ hwnd = CreateWindowExA(0, "TestWindowClass", "Test popup", WS_POPUP | WS_MAXIMIZE,
+ 100, 100, 200, 200, 0, 0, 0, NULL);
+ ok (hwnd != 0, "Failed to create popup window\n");
+ todo_wine ok_sequence(WmCreateInvisibleMaxPopupSeq, "CreateWindow(WS_MAXIMIZED):popup", TRUE);
+ trace("done\n");
+
+ GetWindowRect(hwnd, &rc);
+ ok( rc.right-rc.left == GetSystemMetrics(SM_CXSCREEN) &&
+ rc.bottom-rc.top == GetSystemMetrics(SM_CYSCREEN),
+ "Invalid maximized size before ShowWindow (%ld,%ld)-(%ld,%ld)\n",
+ rc.left, rc.top, rc.right, rc.bottom);
+ /* Reset window's size & position */
+ SetWindowPos(hwnd, 0, 10, 10, 200, 200, SWP_NOZORDER | SWP_NOACTIVATE);
+ flush_sequence();
+
+ trace("calling ShowWindow( SW_SHOWMAXIMIZE ) for invisible popup window\n");
+ ShowWindow(hwnd, SW_SHOWMAXIMIZED);
+ todo_wine ok_sequence(WmShowMaxPopupResizedSeq, "ShowWindow(SW_SHOWMAXIMIZED):popup", TRUE);
+ trace("done\n");
+
+ GetWindowRect(hwnd, &rc);
+ todo_wine ok( rc.right-rc.left == GetSystemMetrics(SM_CXSCREEN) &&
+ rc.bottom-rc.top == GetSystemMetrics(SM_CYSCREEN),
+ "Invalid maximized size after ShowWindow (%ld,%ld)-(%ld,%ld)\n",
+ rc.left, rc.top, rc.right, rc.bottom);
+ DestroyWindow(hwnd);
+ flush_sequence();
+
+ /* Test 2:
+ * 1. Create invisible maximized popup window.
+ * 2. Show it maximized.
+ */
+ trace("calling CreateWindowExA( WS_MAXIMIZE ) for invisible maximized popup window\n");
+ hwnd = CreateWindowExA(0, "TestWindowClass", "Test popup", WS_POPUP | WS_MAXIMIZE,
+ 100, 100, 200, 200, 0, 0, 0, NULL);
+ ok (hwnd != 0, "Failed to create popup window\n");
+ todo_wine ok_sequence(WmCreateInvisibleMaxPopupSeq, "CreateWindow(WS_MAXIMIZED):popup", TRUE);
+ trace("done\n");
+
+ trace("calling ShowWindow( SW_SHOWMAXIMIZE ) for invisible popup window\n");
+ ShowWindow(hwnd, SW_SHOWMAXIMIZED);
+ todo_wine ok_sequence(WmShowMaxPopupSeq, "ShowWindow(SW_SHOWMAXIMIZED):popup", TRUE);
+ trace("done\n");
+ DestroyWindow(hwnd);
+ flush_sequence();
+
+ /* Test 3:
+ * 1. Create visible maximized popup window.
+ * 2. Move and resize it.
+ * 3. Show it maximized.
+ */
+ trace("calling CreateWindowExA( WS_MAXIMIZE ) for maximized popup window\n");
+ hwnd = CreateWindowExA(0, "TestWindowClass", "Test popup", WS_POPUP | WS_MAXIMIZE | WS_VISIBLE,
+ 100, 100, 200, 200, 0, 0, 0, NULL);
+ ok (hwnd != 0, "Failed to create popup window\n");
+ todo_wine ok_sequence(WmCreateMaxPopupSeq, "CreateWindow(WS_MAXIMIZED):popup", TRUE);
+ trace("done\n");
+ DestroyWindow(hwnd);
+ flush_sequence();
}
static void test_sys_menu(HWND hwnd)
More information about the wine-patches
mailing list