From 2500e21a90a085f34ad7433e362aa05fa37b0692 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Thu, 4 Oct 2012 10:34:41 +0200 Subject: [PATCH] winex11: Hold a reference to the surface in UpdateLayeredWindow. --- dlls/winex11.drv/window.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index 052eafa67ed..7c8f391a1b0 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -2386,11 +2386,15 @@ BOOL CDECL X11DRV_UpdateLayeredWindow( HWND hwnd, const UPDATELAYEREDWINDOWINFO } else set_surface_color_key( surface, color_key ); + if (surface) window_surface_add_ref( surface ); release_win_data( data ); if (!surface) return FALSE; - if (!info->hdcSrc) return TRUE; - if (info->prcDirty && !IntersectRect( &rect, &rect, info->prcDirty )) return TRUE; + if (!info->hdcSrc) + { + window_surface_release( surface ); + return TRUE; + } dst_bits = surface->funcs->get_info( surface, bmi ); @@ -2403,6 +2407,7 @@ BOOL CDECL X11DRV_UpdateLayeredWindow( HWND hwnd, const UPDATELAYEREDWINDOWINFO if (info->prcDirty) { + IntersectRect( &rect, &rect, info->prcDirty ); memcpy( src_bits, dst_bits, bmi->bmiHeader.biSizeImage ); PatBlt( hdc, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, BLACKNESS ); } @@ -2422,6 +2427,7 @@ BOOL CDECL X11DRV_UpdateLayeredWindow( HWND hwnd, const UPDATELAYEREDWINDOWINFO surface->funcs->flush( surface ); done: + window_surface_release( surface ); if (hdc) DeleteDC( hdc ); if (dib) DeleteObject( dib ); return ret;