Alexandre Julliard : winex11: Make sure the bitmap created from a packed DIB is owned by x11drv before getting its pixmap .
Module: wine Branch: master Commit: da0327917c36a428b6c5e593f156f64b9c25c0a5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=da0327917c36a428b6c5e593f1... Author: Alexandre Julliard <julliard(a)winehq.org> Date: Wed Sep 7 22:55:12 2011 +0200 winex11: Make sure the bitmap created from a packed DIB is owned by x11drv before getting its pixmap. --- dlls/winex11.drv/dib.c | 16 ++++++++++++---- 1 files changed, 12 insertions(+), 4 deletions(-) diff --git a/dlls/winex11.drv/dib.c b/dlls/winex11.drv/dib.c index b466e69..62aea3c 100644 --- a/dlls/winex11.drv/dib.c +++ b/dlls/winex11.drv/dib.c @@ -4323,10 +4323,11 @@ HGLOBAL X11DRV_DIB_CreateDIBFromPixmap(Pixmap pixmap, HDC hdc) */ Pixmap X11DRV_DIB_CreatePixmapFromDIB( HGLOBAL hPackedDIB, HDC hdc ) { - Pixmap pixmap; + Pixmap pixmap = 0; X_PHYSBITMAP *physBitmap; HBITMAP hBmp; LPBITMAPINFO pbmi; + HDC memdc; /* Create a DDB from the DIB */ @@ -4336,10 +4337,17 @@ Pixmap X11DRV_DIB_CreatePixmapFromDIB( HGLOBAL hPackedDIB, HDC hdc ) pbmi, DIB_RGB_COLORS); GlobalUnlock(hPackedDIB); + /* make sure it's owned by x11drv */ + memdc = CreateCompatibleDC( hdc ); + SelectObject( memdc, hBmp ); + DeleteDC( memdc ); + /* clear the physBitmap so that we can steal its pixmap */ - physBitmap = X11DRV_get_phys_bitmap( hBmp ); - pixmap = physBitmap->pixmap; - physBitmap->pixmap = 0; + if ((physBitmap = X11DRV_get_phys_bitmap( hBmp ))) + { + pixmap = physBitmap->pixmap; + physBitmap->pixmap = 0; + } /* Delete the DDB we created earlier now that we have stolen its pixmap */ DeleteObject(hBmp);
participants (1)
-
Alexandre Julliard