Module: wine Branch: master Commit: bd24842eba26573a4587d751adfbb8344eeac9b6 URL: http://source.winehq.org/git/wine.git/?a=commit;h=bd24842eba26573a4587d751ad...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Mon Jun 29 17:54:07 2015 +0800
winex11: Don't call ExcludeUpdateRgn for a window with WS_CLIPCHILDREN style.
---
dlls/winex11.drv/window.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index 14dc44c..69f6446 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -1335,7 +1335,13 @@ static void move_window_bits( HWND hwnd, Window window, const RECT *old_rect, co rgn = CreateRectRgnIndirect( &dst_rect ); SelectClipRgn( hdc_dst, rgn ); DeleteObject( rgn ); - ExcludeUpdateRgn( hdc_dst, hwnd ); + /* WS_CLIPCHILDREN doesn't exclude children from the window update + * region, and ExcludeUpdateRgn call may inappropriately clip valid + * child window contents from the copied parent window bits, but we + * still want to avoid copying invalid window bits when possible. + */ + if (!(GetWindowLongW( hwnd, GWL_STYLE ) & WS_CLIPCHILDREN )) + ExcludeUpdateRgn( hdc_dst, hwnd );
code = X11DRV_START_EXPOSURES; ExtEscape( hdc_dst, X11DRV_ESCAPE, sizeof(code), (LPSTR)&code, 0, NULL );