Commit 7caa61fd authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

comctl32/imagelist: Make ImageList_Destroy just decrease refcount. Move actual…

comctl32/imagelist: Make ImageList_Destroy just decrease refcount. Move actual destruction to ::Release.
parent 4afc5454
...@@ -692,25 +692,6 @@ ImageList_Destroy (HIMAGELIST himl) ...@@ -692,25 +692,6 @@ ImageList_Destroy (HIMAGELIST himl)
if (!is_valid(himl)) if (!is_valid(himl))
return FALSE; return FALSE;
/* delete image bitmaps */
if (himl->hbmImage)
DeleteObject (himl->hbmImage);
if (himl->hbmMask)
DeleteObject (himl->hbmMask);
/* delete image & mask DCs */
if (himl->hdcImage)
DeleteDC(himl->hdcImage);
if (himl->hdcMask)
DeleteDC(himl->hdcMask);
/* delete blending brushes */
if (himl->hbrBlend25)
DeleteObject (himl->hbrBlend25);
if (himl->hbrBlend50)
DeleteObject (himl->hbrBlend50);
/* Free the IImageList instance */
IImageList_Release((IImageList *) himl); IImageList_Release((IImageList *) himl);
return TRUE; return TRUE;
} }
...@@ -2972,7 +2953,22 @@ static ULONG WINAPI ImageListImpl_Release(IImageList *iface) ...@@ -2972,7 +2953,22 @@ static ULONG WINAPI ImageListImpl_Release(IImageList *iface)
TRACE("(%p) refcount=%u\n", iface, ref); TRACE("(%p) refcount=%u\n", iface, ref);
if (ref == 0) if (ref == 0)
{
/* delete image bitmaps */
if (This->hbmImage) DeleteObject (This->hbmImage);
if (This->hbmMask) DeleteObject (This->hbmMask);
/* delete image & mask DCs */
if (This->hdcImage) DeleteDC (This->hdcImage);
if (This->hdcMask) DeleteDC (This->hdcMask);
/* delete blending brushes */
if (This->hbrBlend25) DeleteObject (This->hbrBlend25);
if (This->hbrBlend50) DeleteObject (This->hbrBlend50);
This->lpVtbl = NULL;
HeapFree(GetProcessHeap(), 0, This); HeapFree(GetProcessHeap(), 0, This);
}
return ref; return ref;
} }
......
...@@ -1251,8 +1251,36 @@ static void test_iimagelist(void) ...@@ -1251,8 +1251,36 @@ static void test_iimagelist(void)
IImageList *imgl; IImageList *imgl;
HIMAGELIST himl; HIMAGELIST himl;
HRESULT hr; HRESULT hr;
ULONG ret;
if (!pImageList_CoCreateInstance || !pHIMAGELIST_QueryInterface) if (!pHIMAGELIST_QueryInterface)
{
win_skip("XP imagelist functions not available\n");
return;
}
/* test reference counting on destruction */
imgl = (IImageList*)createImageList(32, 32);
ret = IUnknown_AddRef(imgl);
ok(ret == 2, "Expected 2, got %d\n", ret);
ret = ImageList_Destroy((HIMAGELIST)imgl);
ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
ret = ImageList_Destroy((HIMAGELIST)imgl);
ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
ret = ImageList_Destroy((HIMAGELIST)imgl);
ok(ret == FALSE, "Expected FALSE, got %d\n", ret);
imgl = (IImageList*)createImageList(32, 32);
ret = IUnknown_AddRef(imgl);
ok(ret == 2, "Expected 2, got %d\n", ret);
ret = ImageList_Destroy((HIMAGELIST)imgl);
ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
ret = IImageList_Release(imgl);
ok(ret == 0, "Expected 0, got %d\n", ret);
ret = ImageList_Destroy((HIMAGELIST)imgl);
ok(ret == FALSE, "Expected FALSE, got %d\n", ret);
if (!pImageList_CoCreateInstance)
{ {
win_skip("Vista imagelist functions not available\n"); win_skip("Vista imagelist functions not available\n");
return; return;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment