Module: wine Branch: master Commit: 13c0c0d0479b81e18c59475af82a9cdc73f3e355 URL: http://source.winehq.org/git/wine.git/?a=commit;h=13c0c0d0479b81e18c59475af8...
Author: Huw Davies huw@codeweavers.com Date: Thu Mar 29 12:10:24 2007 +0100
winex11.drv: Delete the tile pixmap whenever the drawable is changed.
---
dlls/winex11.drv/xrender.c | 40 +++++++++++++++++++++------------------- 1 files changed, 21 insertions(+), 19 deletions(-)
diff --git a/dlls/winex11.drv/xrender.c b/dlls/winex11.drv/xrender.c index b7b1e74..e03540e 100644 --- a/dlls/winex11.drv/xrender.c +++ b/dlls/winex11.drv/xrender.c @@ -571,18 +571,7 @@ BOOL X11DRV_XRender_SelectFont(X11DRV_PDEVICE *physDev, HFONT hfont) */ void X11DRV_XRender_DeleteDC(X11DRV_PDEVICE *physDev) { - wine_tsx11_lock(); - if(physDev->xrender->tile_pict) - pXRenderFreePicture(gdi_display, physDev->xrender->tile_pict); - - if(physDev->xrender->tile_xpm) - XFreePixmap(gdi_display, physDev->xrender->tile_xpm); - - if(physDev->xrender->pict) { - TRACE("freeing pict = %lx dc = %p\n", physDev->xrender->pict, physDev->hdc); - pXRenderFreePicture(gdi_display, physDev->xrender->pict); - } - wine_tsx11_unlock(); + X11DRV_XRender_UpdateDrawable(physDev);
EnterCriticalSection(&xrender_cs); if(physDev->xrender->cache_index != -1) @@ -598,19 +587,32 @@ void X11DRV_XRender_DeleteDC(X11DRV_PDEVICE *physDev) * X11DRV_XRender_UpdateDrawable * * This gets called from X11DRV_SetDrawable and X11DRV_SelectBitmap. - * It deletes the pict when the drawable changes. + * It deletes the pict and tile when the drawable changes. */ void X11DRV_XRender_UpdateDrawable(X11DRV_PDEVICE *physDev) { - if(physDev->xrender->pict) { - TRACE("freeing pict %08lx from dc %p drawable %08lx\n", physDev->xrender->pict, - physDev->hdc, physDev->drawable); - wine_tsx11_lock(); + wine_tsx11_lock(); + + if(physDev->xrender->pict) + { + TRACE("freeing pict = %lx dc = %p\n", physDev->xrender->pict, physDev->hdc); XFlush(gdi_display); pXRenderFreePicture(gdi_display, physDev->xrender->pict); - wine_tsx11_unlock(); + physDev->xrender->pict = 0; } - physDev->xrender->pict = 0; + if(physDev->xrender->tile_pict) + { + pXRenderFreePicture(gdi_display, physDev->xrender->tile_pict); + physDev->xrender->tile_pict = 0; + } + if(physDev->xrender->tile_xpm) + { + XFreePixmap(gdi_display, physDev->xrender->tile_xpm); + physDev->xrender->tile_xpm = 0; + } + + wine_tsx11_unlock(); + return; }