Make DrawMenuBar and SetMenu tests pass under Wine. Take 2
Dmitry Timoshkov
dmitry at baikal.ru
Mon Sep 26 07:55:17 CDT 2005
Hello,
Alexandre pointed out that RedrawWindow call in my previous patch
improperly invalidates the whole window causing it to receive WM_PAINT
message later on. Here is a fixed version of the patch which also
improves the test to detect an unexpected WM_PAINT message.
Changelog:
Dmitry Timoshkov <dmitry at codeweavers.com>
Make DrawMenuBar and SetMenu tests pass under Wine.
diff -up cvs/hq/wine/dlls/user/tests/msg.c wine/dlls/user/tests/msg.c
--- cvs/hq/wine/dlls/user/tests/msg.c 2005-09-14 13:48:11.000000000 +0900
+++ wine/dlls/user/tests/msg.c 2005-09-26 21:48:48.000000000 +0900
@@ -923,7 +923,7 @@ static const struct message WmSetMenuVis
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER },
{ WM_NCCALCSIZE, sent|wparam, 1 },
{ EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, 0, 0 },
- { WM_NCPAINT, sent|wparam, 1 },
+ { WM_NCPAINT, sent }, /* wparam != 1 */
{ WM_GETTEXT, sent|defwinproc|optional },
{ WM_ERASEBKGND, sent|optional },
{ WM_ACTIVATE, sent|optional },
@@ -932,7 +932,7 @@ static const struct message WmSetMenuVis
{ WM_SIZE, sent|defwinproc },
{ EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
{ WM_NCCALCSIZE, sent|wparam|optional, 1 },
- { WM_NCPAINT, sent|wparam|optional, 1 },
+ { WM_NCPAINT, sent|optional }, /* wparam != 1 */
{ WM_ERASEBKGND, sent|optional },
{ 0 }
};
@@ -940,7 +940,7 @@ static const struct message WmSetMenuVis
static const struct message WmSetMenuVisibleNoSizeChangeSeq[] = {
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER },
{ WM_NCCALCSIZE, sent|wparam, 1 },
- { WM_NCPAINT, sent|wparam, 1 },
+ { WM_NCPAINT, sent }, /* wparam != 1 */
{ WM_GETTEXT, sent|defwinproc|optional },
{ WM_ERASEBKGND, sent|optional },
{ WM_ACTIVATE, sent|optional },
@@ -953,7 +953,7 @@ static const struct message WmDrawMenuBa
{
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER },
{ WM_NCCALCSIZE, sent|wparam, 1 },
- { WM_NCPAINT, sent|wparam, 1 },
+ { WM_NCPAINT, sent }, /* wparam != 1 */
{ WM_GETTEXT, sent|defwinproc|optional },
{ WM_ERASEBKGND, sent|optional },
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
@@ -3219,14 +3219,20 @@ static void test_messages(void)
ok (SetMenu(hwnd, 0), "SetMenu\n");
ok_sequence(WmSetMenuNonVisibleNoSizeChangeSeq, "SetMenu:NonVisibleNoSizeChange", FALSE);
ShowWindow(hwnd, SW_SHOW);
+ UpdateWindow( hwnd );
+ while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg );
flush_sequence();
ok (SetMenu(hwnd, 0), "SetMenu\n");
- ok_sequence(WmSetMenuVisibleNoSizeChangeSeq, "SetMenu:VisibleNoSizeChange", TRUE);
+ ok_sequence(WmSetMenuVisibleNoSizeChangeSeq, "SetMenu:VisibleNoSizeChange", FALSE);
ok (SetMenu(hwnd, hmenu), "SetMenu\n");
- ok_sequence(WmSetMenuVisibleSizeChangeSeq, "SetMenu:VisibleSizeChange", TRUE);
+ ok_sequence(WmSetMenuVisibleSizeChangeSeq, "SetMenu:VisibleSizeChange", FALSE);
+ UpdateWindow( hwnd );
+ while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg );
+ flush_sequence();
ok(DrawMenuBar(hwnd), "DrawMenuBar\n");
- ok_sequence(WmDrawMenuBarSeq, "DrawMenuBar", TRUE);
+ while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg );
+ ok_sequence(WmDrawMenuBarSeq, "DrawMenuBar", FALSE);
DestroyWindow(hwnd);
flush_sequence();
diff -up cvs/hq/wine/dlls/x11drv/winpos.c wine/dlls/x11drv/winpos.c
--- cvs/hq/wine/dlls/x11drv/winpos.c 2005-09-20 12:52:44.000000000 +0900
+++ wine/dlls/x11drv/winpos.c 2005-09-26 21:20:55.000000000 +0900
@@ -669,7 +669,11 @@ BOOL X11DRV_set_window_pos( HWND hwnd, H
wine_tsx11_unlock();
}
}
+ else
+ old_style = 0;
WIN_ReleasePtr( win );
+ if ( ret && (old_style & WS_VISIBLE) && (new_style & WS_VISIBLE) && (swp_flags & SWP_FRAMECHANGED) )
+ RedrawWindow( hwnd, NULL, NULL, RDW_FRAME | RDW_ERASE | RDW_ERASENOW );
return ret;
}
More information about the wine-patches
mailing list