Module: wine Branch: master Commit: 228d855907e8b26b186413a4175c185405cb2e8d URL: http://source.winehq.org/git/wine.git/?a=commit;h=228d855907e8b26b186413a417...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Aug 18 18:24:28 2016 +0900
winex11: Correctly free CF_DIB format, and don't free unknown GDI formats.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/winex11.drv/clipboard.c | 44 ++++++++++++++++++-------------------------- 1 file changed, 18 insertions(+), 26 deletions(-)
diff --git a/dlls/winex11.drv/clipboard.c b/dlls/winex11.drv/clipboard.c index 9b6c749..460440d 100644 --- a/dlls/winex11.drv/clipboard.c +++ b/dlls/winex11.drv/clipboard.c @@ -577,38 +577,30 @@ static void X11DRV_CLIPBOARD_FreeData(LPWINE_CLIPDATA lpData) { TRACE("%04x\n", lpData->wFormatID);
- if ((lpData->wFormatID >= CF_GDIOBJFIRST && - lpData->wFormatID <= CF_GDIOBJLAST) || - lpData->wFormatID == CF_BITMAP || - lpData->wFormatID == CF_DIB || - lpData->wFormatID == CF_PALETTE) - { - if (lpData->hData) - DeleteObject(lpData->hData); + if (!lpData->hData) return;
- if ((lpData->wFormatID == CF_DIB) && lpData->drvData) - XFreePixmap(gdi_display, lpData->drvData); - } - else if (lpData->wFormatID == CF_METAFILEPICT) + switch (lpData->wFormatID) { - if (lpData->hData) - { + case CF_BITMAP: + case CF_PALETTE: + DeleteObject(lpData->hData); + break; + case CF_DIB: + if (lpData->drvData) XFreePixmap(gdi_display, lpData->drvData); + GlobalFree(lpData->hData); + break; + case CF_METAFILEPICT: DeleteMetaFile(((METAFILEPICT *)GlobalLock( lpData->hData ))->hMF ); GlobalFree(lpData->hData); - } - } - else if (lpData->wFormatID == CF_ENHMETAFILE) - { - if (lpData->hData) - DeleteEnhMetaFile(lpData->hData); - } - else if (lpData->wFormatID < CF_PRIVATEFIRST || - lpData->wFormatID > CF_PRIVATELAST) - { - if (lpData->hData) + break; + case CF_ENHMETAFILE: + DeleteEnhMetaFile(lpData->hData); + break; + default: + if (lpData->wFormatID >= CF_PRIVATEFIRST && lpData->wFormatID <= CF_PRIVATELAST) break; GlobalFree(lpData->hData); + break; } - lpData->hData = 0; lpData->drvData = 0; }