Related: !8095 and !8013.
-- v3: server: Remove unused parameter `frame` from redraw_window(). server: Add internal WINE_RDW_NESTED to indicate nested redraw_window() calls.
From: Jinoh Kang jinoh.kang.kr@gmail.com
--- server/window.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/server/window.c b/server/window.c index 914d376a44a..7fed5d955a0 100644 --- a/server/window.c +++ b/server/window.c @@ -1616,6 +1616,8 @@ static void validate_parents( struct window *child ) }
+#define WINE_RDW_NESTED 0x80000000U + /* add/subtract a region (in client coordinates) to the update region of the window */ static void redraw_window( struct window *win, struct region *region, int frame, unsigned int flags ) { @@ -1624,6 +1626,7 @@ static void redraw_window( struct window *win, struct region *region, int frame,
if (flags & RDW_INVALIDATE) { + assert( frame == !!(flags & RDW_FRAME) ); if (!(tmp = crop_region_to_win_rect( win, region, frame ))) return;
if (!add_update_region( win, tmp )) return; @@ -1639,6 +1642,7 @@ static void redraw_window( struct window *win, struct region *region, int frame, } else if (win->update_region) { + assert( frame == !!(flags & WINE_RDW_NESTED) ); if ((tmp = crop_region_to_win_rect( win, region, frame ))) { if (!subtract_region( tmp, win->update_region, tmp )) @@ -1688,7 +1692,7 @@ static void redraw_window( struct window *win, struct region *region, int frame, if (rect_in_region( child_rgn, &child->window_rect )) { offset_region( child_rgn, -child->client_rect.left, -child->client_rect.top ); - redraw_window( child, child_rgn, 1, flags ); + redraw_window( child, child_rgn, 1, flags | WINE_RDW_NESTED ); } } free_region( child_rgn ); @@ -2985,7 +2989,7 @@ DECL_HANDLER(redraw_window) } }
- redraw_window( win, region, (flags & RDW_INVALIDATE) && (flags & RDW_FRAME), flags ); + redraw_window( win, region, (flags & RDW_INVALIDATE) && (flags & RDW_FRAME), flags & ~WINE_RDW_NESTED ); if (region) free_region( region ); }
From: Jinoh Kang jinoh.kang.kr@gmail.com
--- server/window.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/server/window.c b/server/window.c index 7fed5d955a0..79f7459f59e 100644 --- a/server/window.c +++ b/server/window.c @@ -1619,14 +1619,14 @@ static void validate_parents( struct window *child ) #define WINE_RDW_NESTED 0x80000000U
/* add/subtract a region (in client coordinates) to the update region of the window */ -static void redraw_window( struct window *win, struct region *region, int frame, unsigned int flags ) +static void redraw_window( struct window *win, struct region *region, unsigned int flags ) { struct region *child_rgn, *tmp; struct window *child;
if (flags & RDW_INVALIDATE) { - assert( frame == !!(flags & RDW_FRAME) ); + const int frame = !!(flags & RDW_FRAME); if (!(tmp = crop_region_to_win_rect( win, region, frame ))) return;
if (!add_update_region( win, tmp )) return; @@ -1642,7 +1642,7 @@ static void redraw_window( struct window *win, struct region *region, int frame, } else if (win->update_region) { - assert( frame == !!(flags & WINE_RDW_NESTED) ); + const int frame = !!(flags & WINE_RDW_NESTED); if ((tmp = crop_region_to_win_rect( win, region, frame ))) { if (!subtract_region( tmp, win->update_region, tmp )) @@ -1692,7 +1692,7 @@ static void redraw_window( struct window *win, struct region *region, int frame, if (rect_in_region( child_rgn, &child->window_rect )) { offset_region( child_rgn, -child->client_rect.left, -child->client_rect.top ); - redraw_window( child, child_rgn, 1, flags | WINE_RDW_NESTED ); + redraw_window( child, child_rgn, flags | WINE_RDW_NESTED ); } } free_region( child_rgn ); @@ -1889,7 +1889,7 @@ static struct region *expose_window( struct window *win, const struct rectangle { /* make it relative to parent */ offset_region( new_vis_rgn, old_window_rect->left, old_window_rect->top ); - redraw_window( win->parent, new_vis_rgn, 0, RDW_INVALIDATE | RDW_ERASE | RDW_ALLCHILDREN ); + redraw_window( win->parent, new_vis_rgn, RDW_INVALIDATE | RDW_ERASE | RDW_ALLCHILDREN ); } } } @@ -2060,7 +2060,7 @@ static void set_window_pos( struct window *win, struct window *previous, }
if (exposed_rgn) - redraw_window( win, exposed_rgn, 1, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME | RDW_ALLCHILDREN ); + redraw_window( win, exposed_rgn, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME | RDW_ALLCHILDREN );
done: if (old_vis_rgn) free_region( old_vis_rgn ); @@ -2085,7 +2085,7 @@ static void set_window_region( struct window *win, struct region *region, int re /* expose anything revealed by the change */ if (old_vis_rgn && ((exposed_rgn = expose_window( win, &win->window_rect, old_vis_rgn, 0 )))) { - redraw_window( win, exposed_rgn, 1, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME | RDW_ALLCHILDREN ); + redraw_window( win, exposed_rgn, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME | RDW_ALLCHILDREN ); free_region( exposed_rgn ); }
@@ -2989,7 +2989,7 @@ DECL_HANDLER(redraw_window) } }
- redraw_window( win, region, (flags & RDW_INVALIDATE) && (flags & RDW_FRAME), flags & ~WINE_RDW_NESTED ); + redraw_window( win, region, flags & ~WINE_RDW_NESTED ); if (region) free_region( region ); }
@@ -3165,7 +3165,7 @@ DECL_HANDLER(set_window_layered_info) win->layered_flags = req->flags; win->is_layered = 1; /* repaint since we know now it's not going to use UpdateLayeredWindow */ - if (!was_layered) redraw_window( win, 0, 1, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_ERASE | RDW_FRAME ); + if (!was_layered) redraw_window( win, 0, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_ERASE | RDW_FRAME ); } else set_win32_error( ERROR_INVALID_WINDOW_HANDLE ); }
v3: Add missing period to first commit message
This merge request was approved by Rémi Bernon.
I'm afraid I don't see how defining a private flag is an improvement over passing an explicit boolean.