Instead of reapplying the old shape, which not only includes the window shape but also the old clipping and visible areas that can change independently.
From: Rémi Bernon rbernon@codeweavers.com
Instead of reapplying the old shape, which not only includes the window shape but also the old clipping and visible areas that can change independently.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57551 --- dlls/win32u/window.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c index 4855555d926..d8974501adb 100644 --- a/dlls/win32u/window.c +++ b/dlls/win32u/window.c @@ -2066,7 +2066,7 @@ static BOOL apply_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags, stru old_surface = win->surface; if (old_surface != new_surface) { - if (old_surface && new_surface) window_surface_set_shape( new_surface, old_surface->shape_region ); + needs_update = TRUE; /* force refreshing the window surface shape */ swp_flags |= SWP_FRAMECHANGED; /* force refreshing non-client area */ }
@@ -2112,7 +2112,7 @@ static BOOL apply_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags, stru win->rects = *new_rects; if ((win->surface = new_surface)) window_surface_add_ref( win->surface ); surface_win = wine_server_ptr_handle( reply->surface_win ); - needs_update = reply->needs_update; + if (!needs_update) needs_update = reply->needs_update; if (get_window_long( win->parent, GWL_EXSTYLE ) & WS_EX_LAYOUTRTL) { RECT client = {0};
This has a side effect, in both GNOME and KDE at least without decorations (without vcrun2017) on resizing out the window it isn't refreshed and partially stays black:
![Screenshot_From_2024-12-16_20-11-30](/uploads/70061b5d0fdce3f9c3f40c0c367301a8/Screenshot_From_2024-12-16_20-11-30.png){width=80%}
With decorations (vcrun2017) I don't see this effect.