MDI client repaint issues (client and children) and conformance tests for this

Reece Dunn msclrhd at googlemail.com
Sat Feb 6 05:09:02 CST 2010


On 6 February 2010 10:29, Reece Dunn <msclrhd at googlemail.com> wrote:
> On 6 February 2010 04:15, Dmitry Timoshkov <dmitry at codeweavers.com> wrote:
>> Reece Dunn <msclrhd at googlemail.com> wrote:
>> Before
>> fixing the problem we need to understand what exactly is the sequence
>> of events that leads to it, how Windows and Wine behaviours differ.
>
> I understand this.

Looking a bit deeper into the MDI tests, the MDI client window used in
the tests has a size (0,0 - 0,0), whereas an MDI client in a
real-world application has it covering the frame's client area.

That is...

----- 8< -----
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index 76fef3b..7c707e7 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -3359,6 +3359,7 @@ static void test_mdi_messages(void)
     CLIENTCREATESTRUCT client_cs;
     HWND mdi_frame, mdi_child, mdi_child2, active_child;
     BOOL zoomed;
+    RECT rc;
     HMENU hMenu = CreateMenu();

     assert(mdi_RegisterWindowClasses());
@@ -3389,6 +3390,11 @@ static void test_mdi_messages(void)
     assert(mdi_client);
     ok_sequence(WmCreateMDIclientSeq, "Create visible MDI client
window", FALSE);

+    GetClientRect(mdi_frame, &rc);
+    MoveWindow(mdi_client, rc.left, rc.top, rc.right - rc.left,
rc.bottom - rc.top, TRUE);
+    /*MessageBoxA(NULL, "test", "test", MB_OK);*/
+    flush_sequence();
+
     ok(GetActiveWindow() == mdi_frame, "wrong active window %p\n",
GetActiveWindow());
     ok(GetFocus() == mdi_frame, "input focus should be on MDI frame
not on %p\n", GetFocus());
----- >8 ------

which then fails some of the tests in Wine...

$ make msg.ok
msg.c:3510: Test failed: ShowWindow(SW_MAXIMIZE):invisible MDI child:
19: in msg 0x0047 expecting wParam 0x9863 got 0x9062
msg.c:3532: Test failed: ShowWindow(SW_RESTORE):invisible MDI child:
5: in msg 0x0047 expecting wParam 0x9863 got 0x9062
msg.c:3556: Test failed: ShowWindow(SW_MAXIMIZE):MDI child: 5: in msg
0x0047 expecting wParam 0x9823 got 0x9022
msg.c:3562: Test failed: ShowWindow(SW_RESTORE):maximized MDI child:
4: in msg 0x0047 expecting wParam 0x9823 got 0x9022
msg.c:3719: Test failed: Create maximized invisible MDI child window:
17: in msg 0x0047 expecting wParam 0x8839 got 0x8038

... I am going to run this on the winetestbot to see how Windows behaves.

- Reece



More information about the wine-devel mailing list