From c70038e7aab4b82a4411284073b0cf6adca17db2 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 27 Jan 2013 13:01:57 +0000 Subject: - new way of removing icolib icons by handle - icon leak fix for Jabber git-svn-id: http://svn.miranda-ng.org/main/trunk@3303 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/modules/icolib/skin2icons.cpp | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'src/modules/icolib') diff --git a/src/modules/icolib/skin2icons.cpp b/src/modules/icolib/skin2icons.cpp index 80bcfc5e9e..58137e74d2 100644 --- a/src/modules/icolib/skin2icons.cpp +++ b/src/modules/icolib/skin2icons.cpp @@ -575,20 +575,31 @@ HANDLE IcoLib_AddNewIcon(int hLangpack, SKINICONDESC* sid) ///////////////////////////////////////////////////////////////////////////////////////// // IcoLib_RemoveIcon -static INT_PTR IcoLib_RemoveIcon(WPARAM, LPARAM lParam) +static int IcoLib_RemoveIcon_Internal(int i) { - if (lParam) { + IcolibItem *item = iconList[ i ]; + IcoLib_FreeIcon(item); + iconList.remove(i); + SAFE_FREE((void**)&item); + return 0; +} + +static INT_PTR IcoLib_RemoveIcon(WPARAM wParam, LPARAM lParam) +{ + if (wParam) { mir_cslock lck(csIconList); - int i; - if ((i = iconList.getIndex((IcolibItem*)&lParam)) != -1) { - IcolibItem *item = iconList[ i ]; - IcoLib_FreeIcon(item); - iconList.remove(i); - SAFE_FREE((void**)&item); - } + int i = iconList.indexOf((IcolibItem*)wParam); + if (i != -1) + return IcoLib_RemoveIcon_Internal(i); + } + + if (lParam) { + mir_cslock lck(csIconList); - return (i == -1) ? 1 : 0; + int i = iconList.getIndex((IcolibItem*)&lParam); + if (i != -1) + return IcoLib_RemoveIcon_Internal(i); } return 1; // Failed } -- cgit v1.2.3