diff options
Diffstat (limited to 'updater/icons.cpp')
-rw-r--r-- | updater/icons.cpp | 119 |
1 files changed, 76 insertions, 43 deletions
diff --git a/updater/icons.cpp b/updater/icons.cpp index 345e948..398303f 100644 --- a/updater/icons.cpp +++ b/updater/icons.cpp @@ -1,61 +1,94 @@ #include "common.h"
#include "icons.h"
-HICON hIconCheck, hIconRestart, hIconCheckExit;
-HANDLE hIcoLibIconsChanged = 0;
+HANDLE hIcoLibIconsChanged = NULL;
-int ReloadIcons(WPARAM wParam, LPARAM lParam) {
- hIconCheck = (HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)"updater_check");
- hIconRestart = (HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)"updater_restart");
- hIconCheckExit = (HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)"updater_checkexit");
+extern HANDLE hMainMenuItem, hMainMenuItemRestart, hMainMenuItemUpdateAndExit;
- return 0;
+typedef struct
+{
+ char* szDescr;
+ char* szName;
+ int defIconID;
+} IconStruct;
+
+static IconStruct iconList[] =
+{
+ { "Check for Updates", "updater_check", IDI_MAINMENU },
+ { "Restart", "updater_restart", IDI_RESTART },
+ { "Update and Exit", "updater_checkexit", IDI_UPDATEANDEXIT },
+};
+
+
+HICON LoadIconEx(IconIndex i)
+{
+ HICON hIcon;
+
+ if (hIcoLibIconsChanged)
+ hIcon = (HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)iconList[(int)i].szName);
+ else
+ hIcon = (HICON)LoadImage(hInst, MAKEINTRESOURCE(iconList[(int)i].defIconID),
+ IMAGE_ICON, 0, 0, 0);
+
+ return hIcon;
+}
+
+void ReleaseIconEx(HICON hIcon)
+{
+ if (hIcoLibIconsChanged)
+ CallService(MS_SKIN2_RELEASEICON, (WPARAM)hIcon, 0);
+ else
+ DestroyIcon(hIcon);
}
-void InitIcons() {
- if(ServiceExists(MS_SKIN2_ADDICON)) {
- SKINICONDESC2 sid;
- sid.cbSize = sizeof(SKINICONDESC2);
- sid.pszSection = "Updater";
+int ReloadIcons(WPARAM wParam, LPARAM lParam)
+{
+ // fix menu icons
+ CLISTMENUITEM menu = {0};
- sid.pszDescription = Translate("Check for Updates");
- sid.pszName = "updater_check";
- sid.pszDefaultFile = "updater.dll";
- sid.iDefaultIndex = 0;
- sid.hDefaultIcon = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_MAINMENU), IMAGE_ICON, 0, 0, 0);
- CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
+ menu.cbSize = sizeof(menu);
+ menu.flags = CMIM_ICON;
- sid.pszDescription = Translate("Restart");
- sid.pszName = "updater_restart";
- sid.pszDefaultFile = "updater.dll";
- sid.iDefaultIndex = 1;
- sid.hDefaultIcon = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_RESTART), IMAGE_ICON, 0, 0, 0);//LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS );
- CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
+ menu.hIcon = LoadIconEx(I_CHKUPD);
+ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMainMenuItem, (LPARAM)&menu);
+ ReleaseIconEx(menu.hIcon);
- sid.pszDescription = Translate("Update and Exit");
- sid.pszName = "updater_checkexit";
- sid.pszDefaultFile = "updater.dll";
- sid.iDefaultIndex = 2;
- sid.hDefaultIcon = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_UPDATEANDEXIT), IMAGE_ICON, 0, 0, 0);//LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS );
- CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
+ menu.hIcon = LoadIconEx(I_RSTRT);
+ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMainMenuItemRestart, (LPARAM)&menu);
+ ReleaseIconEx(menu.hIcon);
+
+ menu.hIcon = LoadIconEx(I_CHKUPDEXT);
+ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMainMenuItemUpdateAndExit, (LPARAM)&menu);
+ ReleaseIconEx(menu.hIcon);
+
+ return 0;
+}
- ReloadIcons(0, 0);
+void InitIcons(void)
+{
+ SKINICONDESC sid = {0};
+ char path[MAX_PATH];
+ int i;
+
+ sid.cbSize = sizeof(SKINICONDESC);
+ sid.pszSection = MODULE;
+ sid.pszDefaultFile = path;
+ GetModuleFileNameA(hInst, path, sizeof(path));
- hIcoLibIconsChanged = HookEvent(ME_SKIN2_ICONSCHANGED, ReloadIcons);
- } else {
- hIconCheck = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_MAINMENU), IMAGE_ICON, 0, 0, 0);//LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS );
- hIconRestart = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_RESTART), IMAGE_ICON, 0, 0, 0);//LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS );
- hIconCheckExit = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_UPDATEANDEXIT), IMAGE_ICON, 0, 0, 0);//LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS );
+ for (i = 0; i < sizeof(iconList) / sizeof(IconStruct); ++i)
+ {
+ sid.pszDescription = Translate(iconList[i].szDescr);
+ sid.pszName = iconList[i].szName;
+ sid.iDefaultIndex = -iconList[i].defIconID;
+ CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
}
+ hIcoLibIconsChanged = HookEvent(ME_SKIN2_ICONSCHANGED, ReloadIcons);
}
-void DeinitIcons() {
- if(hIcoLibIconsChanged) UnhookEvent(hIcoLibIconsChanged);
- else {
- DestroyIcon(hIconCheck);
- DestroyIcon(hIconRestart);
- DestroyIcon(hIconCheckExit);
- }
+
+void DeinitIcons(void)
+{
+ if (hIcoLibIconsChanged) UnhookEvent(hIcoLibIconsChanged);
}
|