diff options
Diffstat (limited to 'src/mir_app')
-rw-r--r-- | src/mir_app/src/IcoLib.h | 5 | ||||
-rw-r--r-- | src/mir_app/src/chat_svc.cpp | 4 | ||||
-rw-r--r-- | src/mir_app/src/icolib.cpp | 21 | ||||
-rw-r--r-- | src/mir_app/src/menu_utils.cpp | 2 | ||||
-rw-r--r-- | src/mir_app/src/skin2opts.cpp | 4 |
5 files changed, 27 insertions, 9 deletions
diff --git a/src/mir_app/src/IcoLib.h b/src/mir_app/src/IcoLib.h index 202e99fb96..7b4ea76779 100644 --- a/src/mir_app/src/IcoLib.h +++ b/src/mir_app/src/IcoLib.h @@ -111,6 +111,9 @@ IconSourceItem* GetIconSourceItem(const wchar_t* file, int indx, int cxIcon, int IcolibItem* IcoLib_FindHIcon(HICON hIcon, bool &big);
IcolibItem* IcoLib_FindIcon(const char* pszIconName);
+void CreateImageLists();
+void DestroyImageLists();
+
int SkinOptionsInit(WPARAM, LPARAM);
extern mir_cs csIconList;
@@ -120,4 +123,4 @@ extern LIST<SectionItem> sectionList; extern BOOL bNeedRebuild;
extern int iconEventActive;
extern HICON hIconBlank;
-extern HANDLE hIcons2ChangedEvent, hIconsChangedEvent;
+extern HANDLE hIconsChangedEvent;
diff --git a/src/mir_app/src/chat_svc.cpp b/src/mir_app/src/chat_svc.cpp index 5b98f4fe44..9deb887ec7 100644 --- a/src/mir_app/src/chat_svc.cpp +++ b/src/mir_app/src/chat_svc.cpp @@ -764,6 +764,7 @@ int LoadChatModule(void) HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded);
HookEvent(ME_SYSTEM_PRESHUTDOWN, PreShutdown);
HookEvent(ME_SKIN_ICONSCHANGED, IconsChanged);
+ HookEvent(ME_FONT_RELOAD, FontsChanged);
g_hWindowList = WindowList_Create();
hHookEvent = CreateHookableEvent(ME_GC_HOOK_EVENT);
@@ -773,9 +774,6 @@ int LoadChatModule(void) g_chatApi.hevPreCreate = CreateHookableEvent(ME_MSG_PRECREATEEVENT);
g_chatApi.hevWinPopup = CreateHookableEvent(ME_MSG_WINDOWPOPUP);
- HookEvent(ME_FONT_RELOAD, FontsChanged);
- HookEvent(ME_SKIN2_ICONSCHANGED, IconsChanged);
-
g_hMenu = LoadMenu(g_plugin.getInst(), MAKEINTRESOURCE(IDR_SRMM));
TranslateMenu(g_hMenu);
diff --git a/src/mir_app/src/icolib.cpp b/src/mir_app/src/icolib.cpp index e40a83f971..bda29a14d8 100644 --- a/src/mir_app/src/icolib.cpp +++ b/src/mir_app/src/icolib.cpp @@ -28,7 +28,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. static BOOL bModuleInitialized = FALSE;
static volatile LONG iStaticCount = 1;
-HANDLE hIcons2ChangedEvent, hIconsChangedEvent;
+static HIMAGELIST himlSmall, hImlBig;
+HANDLE hIconsChangedEvent;
HICON hIconBlank = nullptr;
@@ -64,6 +65,18 @@ LIST<IcolibItem> iconList(20, sttCompareIcons); /////////////////////////////////////////////////////////////////////////////////////////
// Utility functions
+void CreateImageLists()
+{
+ himlSmall = ImageList_Create(g_iIconSX, g_iIconSY, ILC_COLOR32 | ILC_MASK, 50, 50);
+ hImlBig = ImageList_Create(g_iIconX, g_iIconY, ILC_COLOR32 | ILC_MASK, 50, 50);
+}
+
+void DestroyImageLists()
+{
+ ImageList_Destroy(himlSmall); himlSmall = 0;
+ ImageList_Destroy(hImlBig); hImlBig = 0;
+}
+
void __fastcall SafeDestroyIcon(HICON &hIcon)
{
if (hIcon != nullptr) {
@@ -781,9 +794,10 @@ int LoadIcoLibModule(void) hIconBlank = LoadIconEx(g_plugin.getInst(), MAKEINTRESOURCE(IDI_BLANK), 0);
- hIcons2ChangedEvent = CreateHookableEvent(ME_SKIN2_ICONSCHANGED);
hIconsChangedEvent = CreateHookableEvent(ME_SKIN_ICONSCHANGED);
+ CreateImageLists();
+
HookEvent(ME_OPT_INITIALISE, SkinOptionsInit);
return 0;
}
@@ -794,7 +808,8 @@ void UnloadIcoLibModule(void) return;
DestroyHookableEvent(hIconsChangedEvent);
- DestroyHookableEvent(hIcons2ChangedEvent);
+
+ DestroyImageLists();
for (auto &p : iconList)
delete p;
diff --git a/src/mir_app/src/menu_utils.cpp b/src/mir_app/src/menu_utils.cpp index 799f417bdf..b2328884d0 100644 --- a/src/mir_app/src/menu_utils.cpp +++ b/src/mir_app/src/menu_utils.cpp @@ -1278,7 +1278,6 @@ static VOID CALLBACK PostRegisterIcons(HWND, UINT, UINT_PTR, DWORD) static int OnModulesLoaded(WPARAM, LPARAM)
{
posttimerid = SetTimer(nullptr, 0, 5, (TIMERPROC)PostRegisterIcons);
- HookEvent(ME_SKIN2_ICONSCHANGED, OnIconLibChanges);
return 0;
}
@@ -1289,6 +1288,7 @@ int InitGenMenu() HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded);
HookEvent(ME_OPT_INITIALISE, GenMenuOptInit);
+ HookEvent(ME_SKIN_ICONSCHANGED, OnIconLibChanges);
return 0;
}
diff --git a/src/mir_app/src/skin2opts.cpp b/src/mir_app/src/skin2opts.cpp index ea8a54d6a8..24fe66819d 100644 --- a/src/mir_app/src/skin2opts.cpp +++ b/src/mir_app/src/skin2opts.cpp @@ -485,9 +485,11 @@ class CIcoLibOptsDlg : public CDlgBase {
UpdateIconsPreview();
+ DestroyImageLists();
+ CreateImageLists();
+
iconEventActive = 1; // Disable icon destroying - performance boost
NotifyEventHooks(hIconsChangedEvent, 0, 0);
- NotifyEventHooks(hIcons2ChangedEvent, 0, 0);
iconEventActive = 0;
mir_cslock lck(csIconList); // Destroy unused icons
|