Pedro Perdigão : win32u: Allow an out-of-order RECT in RedrawWindow().

Alexandre Julliard julliard at winehq.org
Fri May 13 15:45:12 CDT 2022


Module: wine
Branch: master
Commit: 1146bde39e1de69667d4efdc0da94490ba8e87cc
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=1146bde39e1de69667d4efdc0da94490ba8e87cc

Author: Pedro Perdigão <pperdigao at codeweavers.com>
Date:   Fri May  6 18:07:28 2022 +0100

win32u: Allow an out-of-order RECT in RedrawWindow().

Signed-off-by: Pedro Perdigão <pperdigao at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/tests/msg.c | 16 ++++++----------
 dlls/win32u/dce.c       |  7 +++++--
 2 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index 84833e8b1be..2705914d5e5 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -8174,9 +8174,8 @@ void dump_region(HRGN hrgn)
     HeapFree( GetProcessHeap(), 0, data );
 }
 
-#define todo_check_update_rgn( hwnd, hrgn ) check_update_rgn_( __LINE__, TRUE, hwnd, hrgn )
-#define check_update_rgn( hwnd, hrgn ) check_update_rgn_( __LINE__, FALSE, hwnd, hrgn )
-static void check_update_rgn_( int line, BOOL todo, HWND hwnd, HRGN hrgn )
+#define check_update_rgn( hwnd, hrgn ) check_update_rgn_( __LINE__, hwnd, hrgn )
+static void check_update_rgn_( int line, HWND hwnd, HRGN hrgn )
 {
     INT ret;
     RECT r1, r2;
@@ -8187,10 +8186,7 @@ static void check_update_rgn_( int line, BOOL todo, HWND hwnd, HRGN hrgn )
     ok( ret != ERROR, "GetUpdateRgn failed\n" );
     if (ret == NULLREGION)
     {
-        if(todo)
-            todo_wine ok_(__FILE__,line)( !hrgn, "Update region shouldn't be empty\n" );
-        else
-            ok_(__FILE__,line)( !hrgn, "Update region shouldn't be empty\n" );
+        ok_(__FILE__,line)( !hrgn, "Update region shouldn't be empty\n" );
     }
     else
     {
@@ -8434,7 +8430,7 @@ static void test_paint_messages(void)
     ret = RedrawWindow( hwnd, &rect, NULL, RDW_INVALIDATE );
     ok(ret, "RedrawWindow returned %d instead of TRUE\n", ret);
     SetRectRgn( hrgn, 7, 12, 21, 30 );
-    todo_check_update_rgn( hwnd, hrgn );
+    check_update_rgn( hwnd, hrgn );
 
     /* Top and bottom are swapped */
     RedrawWindow( hwnd, NULL, 0, RDW_VALIDATE|RDW_NOFRAME|RDW_NOERASE );
@@ -8442,7 +8438,7 @@ static void test_paint_messages(void)
     ret = RedrawWindow( hwnd, &rect, NULL, RDW_INVALIDATE );
     ok(ret, "RedrawWindow returned %d instead of TRUE\n", ret);
     SetRectRgn( hrgn, 7, 12, 21, 30 );
-    todo_check_update_rgn( hwnd, hrgn );
+    check_update_rgn( hwnd, hrgn );
 
     /* both reference points are swapped */
     RedrawWindow( hwnd, NULL, 0, RDW_VALIDATE|RDW_NOFRAME|RDW_NOERASE );
@@ -8450,7 +8446,7 @@ static void test_paint_messages(void)
     ret = RedrawWindow( hwnd, &rect, NULL, RDW_INVALIDATE );
     ok(ret, "RedrawWindow returned %d instead of TRUE\n", ret);
     SetRectRgn( hrgn, 7, 12, 21, 30 );
-    todo_check_update_rgn( hwnd, hrgn );
+    check_update_rgn( hwnd, hrgn );
 
     /* flush pending messages */
     flush_events();
diff --git a/dlls/win32u/dce.c b/dlls/win32u/dce.c
index c41067af464..fbde3f3d0ec 100644
--- a/dlls/win32u/dce.c
+++ b/dlls/win32u/dce.c
@@ -1457,8 +1457,11 @@ BOOL WINAPI NtUserRedrawWindow( HWND hwnd, const RECT *rect, HRGN hrgn, UINT fla
 
     if (rect && !hrgn)
     {
-        if (IsRectEmpty( rect )) rect = ∅
-        ret = redraw_window_rects( hwnd, flags, rect, 1 );
+        RECT ordered = *rect;
+
+        order_rect( &ordered );
+        if (IsRectEmpty( &ordered )) ordered = empty;
+        ret = redraw_window_rects( hwnd, flags, &ordered, 1 );
     }
     else if (!hrgn)
     {




More information about the wine-cvs mailing list