user32: Change the position and size of layered windows before flushing their surfaces.

When UpdateLayeredWindow() is called to paint a window and update its
size, USER_Driver->pUpdateLayeredWindow() needs to be called after the
window position and size are updated. Otherwise, UpdateLayeredWindow()
may flush the painted content to a smaller window and then enlarge it,
losing the painted result.

Fix Word 2016 window frame corruption after restoring from maximized state.

Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zhiyi Zhang 2021-10-20 10:07:59 +08:00 committed by Alexandre Julliard
parent e45d51fdda
commit 8892b79118
1 changed files with 1 additions and 3 deletions

View File

@ -4134,10 +4134,8 @@ BOOL WINAPI UpdateLayeredWindowIndirect( HWND hwnd, const UPDATELAYEREDWINDOWINF
TRACE( "window %p win %s client %s\n", hwnd,
wine_dbgstr_rect(&window_rect), wine_dbgstr_rect(&client_rect) );
if (!USER_Driver->pUpdateLayeredWindow( hwnd, info, &window_rect )) return FALSE;
set_window_pos( hwnd, 0, flags, &window_rect, &client_rect, NULL );
return TRUE;
return USER_Driver->pUpdateLayeredWindow( hwnd, info, &window_rect );
}