Dmitry Timoshkov : winex11: Don' t call ExcludeUpdateRgn for a window with WS_CLIPCHILDREN style.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Jul 1 09:06:25 CDT 2015


Module: wine
Branch: master
Commit: bd24842eba26573a4587d751adfbb8344eeac9b6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=bd24842eba26573a4587d751adfbb8344eeac9b6

Author: Dmitry Timoshkov <dmitry at 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 );




More information about the wine-cvs mailing list