[PATCH v2 1/2] user32/tests: Add test for RedrawWindow with RDW_VALIDATE flag.

Roman Pišl rpisl at seznam.cz
Sat May 2 06:10:03 CDT 2020


Signed-off-by: Roman Pišl <rpisl at seznam.cz>
---
 dlls/user32/tests/msg.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index 93ab7b4a27..2763857d8a 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -136,7 +136,8 @@ typedef enum {
     optional=0x80,
     hook=0x100,
     winevent_hook=0x200,
-    kbd_hook=0x400
+    kbd_hook=0x400,
+    has_update=0x800
 } msg_flags_t;
 
 struct message {
@@ -2547,6 +2548,11 @@ static void ok_sequence_(const struct message *expected_list, const char *contex
                 context, count, expected->message);
             if ((expected->flags & kbd_hook) != (actual->flags & kbd_hook)) dump++;
 
+            todo_wine_if(expected->flags & has_update)
+            ok_( file, line) (!(expected->flags & has_update) || (actual->flags & has_update),
+                "%s: %u: the msg 0x%04x should have update region\n",
+                context, count, expected->message);
+
 	    expected++;
 	    actual++;
 	}
@@ -7858,6 +7864,11 @@ static const struct message WmPaint[] = {
     { 0 }
 };
 
+static const struct message WmPaintUpdate[] = {
+    { WM_PAINT, sent|has_update },
+    { 0 }
+};
+
 static const struct message WmParentOnlyPaint[] = {
     { WM_PAINT, sent|parent },
     { 0 }
@@ -8217,6 +8228,16 @@ static void test_paint_messages(void)
     }
     ok_sequence( WmGetUpdateRect, "GetUpdateRect", FALSE );
 
+    /* RedrawWindow with RDW_VALIDATE triggers WM_PAINT with non-empty update region */
+    flush_sequence();
+    InvalidateRect( hwnd, NULL, FALSE );
+    GetClientRect( hwnd, &rect );
+    SetRectRgn( hrgn, rect.left, rect.top, rect.right, rect.bottom );
+    check_update_rgn( hwnd, hrgn );
+    RedrawWindow( hwnd, &rect, NULL, RDW_INTERNALPAINT|RDW_NOERASE|RDW_NOFRAME|RDW_UPDATENOW|RDW_VALIDATE );
+    check_update_rgn( hwnd, 0 );
+    ok_sequence( WmPaintUpdate, "PaintUpdate", FALSE );
+
     DestroyWindow( hwnd );
 
     /* now test with a child window */
@@ -9531,6 +9552,9 @@ static LRESULT MsgCheckProc (BOOL unicode, HWND hwnd, UINT message,
     msg.flags = sent|wparam|lparam;
     if (defwndproc_counter) msg.flags |= defwinproc;
     if (beginpaint_counter) msg.flags |= beginpaint;
+
+    if (message == WM_PAINT && GetUpdateRect(hwnd, NULL, FALSE)) msg.flags |= has_update;
+
     msg.wParam = wParam;
     msg.lParam = lParam;
     msg.descr = "MsgCheckProc";
-- 
2.20.1




More information about the wine-devel mailing list