From 1ac5dafa951f57dfca5cf0dd6e7d2eeeea2f6772 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 3 Jul 2015 08:43:58 +0000 Subject: - IDR_CONTEXT resource removed from all clists; - all menu control rewritten using Menu_* functions, thus making group & tray menu customizable in StdClist & Clist_Nicer; - major gdi resource leak fixed git-svn-id: http://svn.miranda-ng.org/main/trunk@14483 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/mir_app/res/addgroup.ico | Bin 0 -> 1150 bytes src/mir_app/res/resource.rc | 1 + src/mir_app/src/clisttray.cpp | 28 ++------- src/mir_app/src/clui.cpp | 16 ++---- src/mir_app/src/menu_clist.cpp | 2 +- src/mir_app/src/menu_groups.cpp | 122 ++++++++++++++++++++++++++++++++++++++-- src/mir_app/src/menu_tray.cpp | 77 +++++++++++++++++++++++++ src/mir_app/src/mir_app.def | 1 + src/mir_app/src/mir_app64.def | 1 + src/mir_app/src/miranda.h | 1 + src/mir_app/src/resource.h | 2 +- src/mir_app/src/skinicons.cpp | 19 ++++--- 12 files changed, 220 insertions(+), 50 deletions(-) create mode 100644 src/mir_app/res/addgroup.ico (limited to 'src/mir_app') diff --git a/src/mir_app/res/addgroup.ico b/src/mir_app/res/addgroup.ico new file mode 100644 index 0000000000..539c32fcd9 Binary files /dev/null and b/src/mir_app/res/addgroup.ico differ diff --git a/src/mir_app/res/resource.rc b/src/mir_app/res/resource.rc index 427d481534..e1a70975c5 100644 --- a/src/mir_app/res/resource.rc +++ b/src/mir_app/res/resource.rc @@ -1215,6 +1215,7 @@ IDI_MCREMOVE ICON "meta_remove2.ico" IDI_MCCONVERT ICON "meta_convert.ico" IDI_MCADD ICON "meta_add.ico" IDI_MCSETDEFAULT ICON "meta_set_as_default.ico" +IDI_ADDGROUP ICON "addgroup.ico" ///////////////////////////////////////////////////////////////////////////// // diff --git a/src/mir_app/src/clisttray.cpp b/src/mir_app/src/clisttray.cpp index 10ba26b081..b671474456 100644 --- a/src/mir_app/src/clisttray.cpp +++ b/src/mir_app/src/clisttray.cpp @@ -685,7 +685,7 @@ INT_PTR fnTrayIconProcessMessage(WPARAM wParam, LPARAM lParam) else if (msg->lParam == (db_get_b(NULL, "CList", "Tray1Click", SETTING_TRAY1CLICK_DEFAULT) ? WM_LBUTTONUP : WM_LBUTTONDBLCLK)) { if ((GetAsyncKeyState(VK_CONTROL) & 0x8000)) { POINT pt; - HMENU hMenu = (HMENU)Menu_GetStatusMenu(); + HMENU hMenu = Menu_GetStatusMenu(); for (int i = 0; i < cli.trayIconCount; i++) { if ((unsigned)cli.trayIcon[i].id == msg->wParam) { @@ -719,32 +719,16 @@ INT_PTR fnTrayIconProcessMessage(WPARAM wParam, LPARAM lParam) cli.pfnShowHide(0, 0); } else if (msg->lParam == WM_RBUTTONUP) { - HMENU hMainMenu = LoadMenu(cli.hInst, MAKEINTRESOURCE(IDR_CONTEXT)); - HMENU hMenu = GetSubMenu(hMainMenu, 0); - TranslateMenu(hMenu); - - MENUITEMINFO mii = { 0 }; - mii.cbSize = sizeof(mii); - mii.fMask = MIIM_SUBMENU | MIIM_TYPE; - mii.fType = MFT_STRING; - mii.hSubMenu = Menu_GetMainMenu(); - mii.dwTypeData = TranslateT("&Main menu"); - InsertMenuItem(hMenu, 1, TRUE, &mii); - mii.hSubMenu = (HMENU)Menu_GetStatusMenu(); - mii.dwTypeData = TranslateT("&Status"); - InsertMenuItem(hMenu, 2, TRUE, &mii); - SetMenuDefaultItem(hMenu, ID_TRAY_HIDE, FALSE); - + HMENU hMenu = Menu_BuildTrayMenu(); SetForegroundWindow(msg->hwnd); SetFocus(msg->hwnd); POINT pt; GetCursorPos(&pt); - TrackPopupMenu(hMenu, TPM_TOPALIGN | TPM_LEFTALIGN, pt.x, pt.y, 0, msg->hwnd, NULL); - - RemoveMenu(hMenu, 1, MF_BYPOSITION); - RemoveMenu(hMenu, 1, MF_BYPOSITION); - DestroyMenu(hMainMenu); + cli.bTrayMenuOnScreen = TRUE; + TrackPopupMenu(hMenu, TPM_TOPALIGN | TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, 0, msg->hwnd, NULL); + Menu_DestroyNestedMenu(hMenu); + PostMessage(msg->hwnd, WM_NULL, 0, 0); } else if (msg->lParam == WM_MOUSEMOVE) { s_LastHoverIconID = msg->wParam; diff --git a/src/mir_app/src/clui.cpp b/src/mir_app/src/clui.cpp index 197bff3f2f..2d984fc5dd 100644 --- a/src/mir_app/src/clui.cpp +++ b/src/mir_app/src/clui.cpp @@ -933,17 +933,9 @@ LRESULT CALLBACK fnContactListWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM } } if (PtInRect(&rc, pt)) { - HMENU hMenu; - hMenu = GetSubMenu(LoadMenu(cli.hInst, MAKEINTRESOURCE(IDR_CONTEXT)), 1); - TranslateMenu(hMenu); - CheckMenuItem(hMenu, POPUP_HIDEOFFLINE, - db_get_b(NULL, "CList", "HideOffline", SETTING_HIDEOFFLINE_DEFAULT) ? MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hMenu, POPUP_HIDEOFFLINEROOT, SendMessage(cli.hwndContactTree, CLM_GETHIDEOFFLINEROOT, 0, 0) ? MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hMenu, POPUP_HIDEEMPTYGROUPS, - GetWindowLongPtr(cli.hwndContactTree, GWL_STYLE) & CLS_HIDEEMPTYGROUPS ? MF_CHECKED : MF_UNCHECKED); - CheckMenuItem(hMenu, POPUP_DISABLEGROUPS, GetWindowLongPtr(cli.hwndContactTree, GWL_STYLE) & CLS_USEGROUPS ? MF_UNCHECKED : MF_CHECKED); - TrackPopupMenu(hMenu, TPM_TOPALIGN | TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwnd, NULL); - DestroyMenu(hMenu); + HMENU hMenu = Menu_BuildGroupMenu(); + TrackPopupMenu(hMenu, TPM_TOPALIGN | TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, 0, hwnd, NULL); + Menu_DestroyNestedMenu(hMenu); return 0; } GetWindowRect(cli.hwndStatus, &rc); @@ -952,7 +944,7 @@ LRESULT CALLBACK fnContactListWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM if (db_get_b(NULL, "CLUI", "SBarRightClk", 0)) hMenu = Menu_GetMainMenu(); else - hMenu = (HMENU) Menu_GetStatusMenu(); + hMenu = Menu_GetStatusMenu(); TrackPopupMenu(hMenu, TPM_TOPALIGN | TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwnd, NULL); return 0; } diff --git a/src/mir_app/src/menu_clist.cpp b/src/mir_app/src/menu_clist.cpp index 03f5830db9..3bd8a919d8 100644 --- a/src/mir_app/src/menu_clist.cpp +++ b/src/mir_app/src/menu_clist.cpp @@ -59,7 +59,7 @@ bool prochotkey; HANDLE hPreBuildMainMenuEvent, hStatusModeChangeEvent, hPreBuildContactMenuEvent; -static HMENU hMainMenu, hStatusMenu = 0; +HMENU hMainMenu, hStatusMenu; const int statusModeList[MAX_STATUS_COUNT] = { ID_STATUS_OFFLINE, ID_STATUS_ONLINE, ID_STATUS_AWAY, ID_STATUS_NA, ID_STATUS_OCCUPIED, diff --git a/src/mir_app/src/menu_groups.cpp b/src/mir_app/src/menu_groups.cpp index ea7c929ee5..f70ce3266f 100644 --- a/src/mir_app/src/menu_groups.cpp +++ b/src/mir_app/src/menu_groups.cpp @@ -28,7 +28,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ////////////////////////////// Group MENU ////////////////////////////// int hGroupMenuObject, hSubGroupMenuObject; + static HANDLE hEventPreBuildGroupMenu, hEventPreBuildSubGroupMenu; +static HGENMENU hHideOfflineUsersMenuItem; +static HGENMENU hHideOfflineUsersOutHereMenuItem; +static HGENMENU hHideEmptyGroupsMenuItem; +static HGENMENU hDisableGroupsMenuItem; // Groupmenu exec param(ownerdata) @@ -96,6 +101,8 @@ INT_PTR FreeOwnerDataGroupMenu(WPARAM, LPARAM lParam) return 0; } +///////////////////////////////////////////////////////////////////////////////////////// + INT_PTR HideGroupsHelper(WPARAM, LPARAM) { int newVal = !(GetWindowLongPtr(cli.hwndContactTree, GWL_STYLE) & CLS_HIDEEMPTYGROUPS); @@ -126,7 +133,21 @@ INT_PTR CreateGroupHelper(WPARAM, LPARAM) SendMessage(cli.hwndContactTree, CLM_SETUSEGROUPS, 1, 0); Clist_CreateGroup(0, 0); return 0; -}; +} + +static int OnBuildGroupMenu(WPARAM, LPARAM) +{ + bool bChecked = db_get_b(NULL, "CList", "HideOffline", SETTING_HIDEOFFLINE_DEFAULT) != 0; + Menu_SetChecked(hHideOfflineUsersMenuItem, bChecked); + + bChecked = SendMessage(cli.hwndContactTree, CLM_GETHIDEOFFLINEROOT, 0, 0) != 0; + Menu_SetChecked(hHideOfflineUsersOutHereMenuItem, bChecked); + + DWORD dwStyle = GetWindowLongPtr(cli.hwndContactTree, GWL_STYLE); + Menu_SetChecked(hHideEmptyGroupsMenuItem, (dwStyle & CLS_HIDEEMPTYGROUPS) != 0); + Menu_SetChecked(hDisableGroupsMenuItem, (dwStyle & CLS_USEGROUPS) != 0); + return 0; +} ///////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////// SubGroup MENU ////////////////////////////// @@ -146,11 +167,15 @@ MIR_APP_DLL(HMENU) Menu_BuildSubGroupMenu(ClcGroup *group) return hMenu; } +///////////////////////////////////////////////////////////////////////////////////////// + HMENU cliBuildGroupPopupMenu(ClcGroup *group) { return Menu_BuildSubGroupMenu(group); } +///////////////////////////////////////////////////////////////////////////////////////// + MIR_APP_DLL(HGENMENU) Menu_AddSubGroupMenuItem(TMO_MenuItem *pmi, GroupMenuParam *gmp) { SubGroupMenuExecParam *mmep = (SubGroupMenuExecParam*)mir_calloc(sizeof(SubGroupMenuExecParam)); @@ -172,6 +197,8 @@ MIR_APP_DLL(HGENMENU) Menu_AddSubGroupMenuItem(TMO_MenuItem *pmi, GroupMenuParam return hNewItem; } +///////////////////////////////////////////////////////////////////////////////////////// + static INT_PTR SubGroupMenuCheckService(WPARAM wParam, LPARAM) { TCheckProcParam * CParam = (TCheckProcParam*)wParam; @@ -183,6 +210,7 @@ static INT_PTR SubGroupMenuCheckService(WPARAM wParam, LPARAM) return 1; } +///////////////////////////////////////////////////////////////////////////////////////// // called with: // wparam - ownerdata // lparam - lparam from winproc @@ -200,6 +228,8 @@ static INT_PTR SubGroupMenuExecService(WPARAM wParam, LPARAM lParam) return 1; } +///////////////////////////////////////////////////////////////////////////////////////// + static INT_PTR FreeOwnerDataSubGroupMenu(WPARAM, LPARAM lParam) { SubGroupMenuExecParam * mmep = (SubGroupMenuExecParam *)lParam; @@ -210,6 +240,19 @@ static INT_PTR FreeOwnerDataSubGroupMenu(WPARAM, LPARAM lParam) return 0; } +///////////////////////////////////////////////////////////////////////////////////////// + +static HGENMENU hHideOfflineUsersHereMenuItem; + +static int OnBuildSubGroupMenu(WPARAM wParam, LPARAM) +{ + ClcGroup *group = (ClcGroup*)wParam; + if (group != 0) // contact->group + Menu_SetChecked(hHideOfflineUsersHereMenuItem, group->hideOffline != 0); + return 0; +} + +///////////////////////////////////////////////////////////////////////////////////////// // wparam menu handle to pass to clc.c // lparam WM_COMMAND HWND static INT_PTR GroupMenuExecProxy(WPARAM wParam, LPARAM lParam) @@ -218,22 +261,63 @@ static INT_PTR GroupMenuExecProxy(WPARAM wParam, LPARAM lParam) return 0; } +///////////////////////////////////////////////////////////////////////////////////////// + void InitGroupMenus(void) { + GroupMenuParam gmp = {}; + // Group menu CreateServiceFunction("CLISTMENUSGroup/ExecService", GroupMenuExecService); CreateServiceFunction("CLISTMENUSGroup/FreeOwnerDataGroupMenu", FreeOwnerDataGroupMenu); - CreateServiceFunction("CLISTMENUSGroup/HideGroupsHelper", HideGroupsHelper); - CreateServiceFunction("CLISTMENUSGroup/UseGroupsHelper", UseGroupsHelper); - CreateServiceFunction("CLISTMENUSGroup/HideOfflineRootHelper", HideOfflineRootHelper); - CreateServiceFunction("CLISTMENUSGroup/CreateGroupHelper", CreateGroupHelper); hEventPreBuildGroupMenu = CreateHookableEvent(ME_CLIST_PREBUILDGROUPMENU); + HookEvent(ME_CLIST_PREBUILDGROUPMENU, OnBuildGroupMenu); hGroupMenuObject = Menu_AddObject("GroupMenu", LPGEN("Group menu"), 0, "CLISTMENUSGroup/ExecService"); Menu_ConfigureObject(hGroupMenuObject, MCO_OPT_USERDEFINEDITEMS, TRUE); Menu_ConfigureObject(hGroupMenuObject, MCO_OPT_FREE_SERVICE, "CLISTMENUSGroup/FreeOwnerDataGroupMenu"); Menu_ConfigureObject(hGroupMenuObject, MCO_OPT_ONADD_SERVICE, "CLISTMENUSGroup/GroupMenuOnAddService"); + { + CMenuItem mi; + mi.position = 100000; + mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_GROUPADD); + mi.pszService = "CLISTMENUSGroup/CreateGroupHelper"; + mi.name.a = LPGEN("&New group"); + Menu_AddGroupMenuItem(&mi); + CreateServiceFunction(mi.pszService, CreateGroupHelper); + + mi.position = 500001; + mi.hIcolibItem = NULL; + mi.pszService = MS_CLIST_SETHIDEOFFLINE; + mi.name.a = LPGEN("&Hide offline users"); + gmp.wParam = -1; + hHideOfflineUsersMenuItem = Menu_AddGroupMenuItem(&mi, &gmp); + + mi.position = 500002; + mi.pszService = "CLISTMENUSGroup/HideOfflineRootHelper"; + mi.name.a = LPGEN("Hide &offline users out here"); + hHideOfflineUsersOutHereMenuItem = Menu_AddGroupMenuItem(&mi); + CreateServiceFunction(mi.pszService, HideOfflineRootHelper); + + mi.position = 500003; + mi.pszService = "CLISTMENUSGroup/HideGroupsHelper"; + mi.name.a = LPGEN("Hide &empty groups"); + hHideEmptyGroupsMenuItem = Menu_AddGroupMenuItem(&mi); + CreateServiceFunction(mi.pszService, HideGroupsHelper); + + mi.position = 500004; + mi.pszService = "CLISTMENUSGroup/UseGroupsHelper"; + mi.name.a = LPGEN("Disable &groups"); + hDisableGroupsMenuItem = Menu_AddGroupMenuItem(&mi); + CreateServiceFunction(mi.pszService, UseGroupsHelper); + + mi.position = 1900000; + mi.pszService = "CloseAction"; + mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_EXIT); + mi.name.a = LPGEN("E&xit"); + Menu_AddGroupMenuItem(&mi); + } // SubGroup menu CreateServiceFunction("CLISTMENUSSubGroup/ExecService", SubGroupMenuExecService); @@ -242,9 +326,37 @@ void InitGroupMenus(void) CreateServiceFunction("CLISTMENUSSubGroup/GroupMenuExecProxy", GroupMenuExecProxy); hEventPreBuildSubGroupMenu = CreateHookableEvent(ME_CLIST_PREBUILDSUBGROUPMENU); + HookEvent(ME_CLIST_PREBUILDSUBGROUPMENU, OnBuildSubGroupMenu); hSubGroupMenuObject = Menu_AddObject("SubGroupMenu", LPGEN("Subgroup menu"), 0, "CLISTMENUSSubGroup/ExecService"); Menu_ConfigureObject(hSubGroupMenuObject, MCO_OPT_USERDEFINEDITEMS, TRUE); Menu_ConfigureObject(hSubGroupMenuObject, MCO_OPT_FREE_SERVICE, "CLISTMENUSSubGroup/FreeOwnerDataSubGroupMenu"); Menu_ConfigureObject(hSubGroupMenuObject, MCO_OPT_CHECK_SERVICE, "CLISTMENUSSubGroup/SubGroupMenuCheckService"); + { + CMenuItem mi; + mi.position = 1000; + mi.hIcolibItem = Skin_GetIconHandle(SKINICON_AUTH_ADD); + mi.pszService = "CLISTMENUSSubGroup/GroupMenuExecProxy"; + mi.name.a = LPGEN("&New subgroup"); + gmp.wParam = POPUP_NEWSUBGROUP; + Menu_AddSubGroupMenuItem(&mi, &gmp); + + mi.position = 1001; + mi.hIcolibItem = 0; + mi.name.a = LPGEN("&Hide offline users in here"); + gmp.wParam = POPUP_GROUPHIDEOFFLINE; + hHideOfflineUsersHereMenuItem = Menu_AddSubGroupMenuItem(&mi, &gmp); + + mi.position = 900001; + mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_RENAME); + mi.name.a = LPGEN("&Rename group"); + gmp.wParam = POPUP_RENAMEGROUP; + Menu_AddSubGroupMenuItem(&mi, &gmp); + + mi.position = 900002; + mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_DELETE); + mi.name.a = LPGEN("&Delete group"); + gmp.wParam = POPUP_DELETEGROUP; + Menu_AddSubGroupMenuItem(&mi, &gmp); + } } diff --git a/src/mir_app/src/menu_tray.cpp b/src/mir_app/src/menu_tray.cpp index f3ccede108..4f9a616bd4 100644 --- a/src/mir_app/src/menu_tray.cpp +++ b/src/mir_app/src/menu_tray.cpp @@ -28,6 +28,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. static int hTrayMenuObject; static HANDLE hEventPreBuildTrayMenu; +static HGENMENU hTrayMainMenuItemProxy, hTrayStatusMenuItemProxy; ///////////////////////////////////////////////////////////////////////////////////////// // Tray menu services @@ -48,6 +49,17 @@ MIR_APP_DLL(HGENMENU) Menu_AddTrayMenuItem(TMO_MenuItem *pmi) return pimi; } +MIR_APP_DLL(void) Menu_DestroyNestedMenu(HMENU hMenu) +{ + int cnt = GetMenuItemCount(hMenu); + for (int i = 0; i < cnt; ++i) { + HMENU hSubMenu = GetSubMenu(hMenu, i); + if (hSubMenu && ((hSubMenu == hStatusMenu) || (hSubMenu == hMainMenu))) + RemoveMenu(hMenu, i--, MF_BYPOSITION); + } + DestroyMenu(hMenu); +} + // called with: // wparam - ownerdata // lparam - lparam from winproc @@ -65,10 +77,30 @@ static INT_PTR FreeOwnerDataTrayMenu(WPARAM, LPARAM lParam) return 0; } +static INT_PTR TrayMenuOnAddService(WPARAM wParam, LPARAM lParam) +{ + MENUITEMINFO *mii = (MENUITEMINFO*)wParam; + if (mii == NULL) + return 0; + + if (hTrayMainMenuItemProxy == (HGENMENU)lParam) { + mii->fMask |= MIIM_SUBMENU; + mii->hSubMenu = hMainMenu; + } + + if (hTrayStatusMenuItemProxy == (HGENMENU)lParam) { + mii->fMask |= MIIM_SUBMENU; + mii->hSubMenu = hStatusMenu = Menu_GetStatusMenu(); + } + + return TRUE; +} + void InitTrayMenus(void) { CreateServiceFunction("CLISTMENUSTRAY/ExecService", TrayMenuExecService); CreateServiceFunction("CLISTMENUSTRAY/FreeOwnerDataTrayMenu", FreeOwnerDataTrayMenu); + CreateServiceFunction("CLISTMENUSTRAY/TrayMenuOnAddService", TrayMenuOnAddService); hEventPreBuildTrayMenu = CreateHookableEvent(ME_CLIST_PREBUILDTRAYMENU); @@ -77,4 +109,49 @@ void InitTrayMenus(void) Menu_ConfigureObject(hTrayMenuObject, MCO_OPT_USERDEFINEDITEMS, TRUE); Menu_ConfigureObject(hTrayMenuObject, MCO_OPT_FREE_SERVICE, "CLISTMENUSTRAY/FreeOwnerDataTrayMenu"); Menu_ConfigureObject(hTrayMenuObject, MCO_OPT_ONADD_SERVICE, "CLISTMENUSTRAY/TrayMenuOnAddService"); + + // add exit command to menu + CMenuItem mi; + mi.flags = CMIF_DEFAULT; + mi.position = 100000; + mi.pszService = MS_CLIST_SHOWHIDE; + mi.name.a = LPGEN("&Hide/show"); + mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_SHOWHIDE); + Menu_AddTrayMenuItem(&mi); + + mi.flags = 0; + mi.position = 200000; + mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_FINDUSER); + mi.pszService = "FindAdd/FindAddCommand"; + mi.name.a = LPGEN("&Find/add contacts..."); + Menu_AddTrayMenuItem(&mi); + + mi.position = 300000; + mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_MAINMENU); // eternity #004 + mi.pszService = NULL; + mi.name.a = LPGEN("&Main menu"); + hTrayMainMenuItemProxy = Menu_AddTrayMenuItem(&mi); + + mi.position = 300100; + mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_STATUS); // eternity #004 + mi.name.a = LPGEN("&Status"); + hTrayStatusMenuItemProxy = Menu_AddTrayMenuItem(&mi); + + mi.position = 400000; + mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_OPTIONS); + mi.pszService = "Options/OptionsCommand"; + mi.name.a = LPGEN("&Options..."); + Menu_AddTrayMenuItem(&mi); + + mi.position = 500000; + mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_MIRANDA); + mi.pszService = "Help/AboutCommand"; + mi.name.a = LPGEN("&About"); + Menu_AddTrayMenuItem(&mi); + + mi.position = 900000; + mi.pszService = "CloseAction"; + mi.name.a = LPGEN("E&xit"); + mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_EXIT); + Menu_AddTrayMenuItem(&mi); } diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index 3fbf3bff93..56dd4712d9 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -235,3 +235,4 @@ Menu_AddSubGroupMenuItem @232 Menu_BuildGroupMenu @233 Menu_AddTrayMenuItem @234 Menu_BuildTrayMenu @235 +Menu_DestroyNestedMenu @236 diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index 9f72915c5f..0d97c9481b 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -235,3 +235,4 @@ Menu_AddSubGroupMenuItem @232 Menu_BuildGroupMenu @233 Menu_AddTrayMenuItem @234 Menu_BuildTrayMenu @235 +Menu_DestroyNestedMenu @236 diff --git a/src/mir_app/src/miranda.h b/src/mir_app/src/miranda.h index a93754f9a4..7bae22e83c 100644 --- a/src/mir_app/src/miranda.h +++ b/src/mir_app/src/miranda.h @@ -127,6 +127,7 @@ extern CLIST_INTERFACE cli; extern int hMainMenuObject, hContactMenuObject, hStatusMenuObject; extern HANDLE hPreBuildMainMenuEvent, hPreBuildContactMenuEvent; extern HANDLE hShutdownEvent, hPreShutdownEvent; +extern HMENU hMainMenu, hStatusMenu; extern const int statusModeList[ MAX_STATUS_COUNT ]; extern const int skinIconStatusList[ MAX_STATUS_COUNT ]; diff --git a/src/mir_app/src/resource.h b/src/mir_app/src/resource.h index 00027b4c75..d94ff10d99 100644 --- a/src/mir_app/src/resource.h +++ b/src/mir_app/src/resource.h @@ -22,7 +22,7 @@ #define IDI_NOTLOADED_GRAY 114 #define IDD_ADDED 115 #define IDD_ENTER_STRING 116 - +#define IDI_ADDGROUP 117 #define IDD_URLSEND 119 #define IDD_URLRECV 120 #define IDD_AUTHREQ 121 diff --git a/src/mir_app/src/skinicons.cpp b/src/mir_app/src/skinicons.cpp index ccf499ef6b..0891d0d1ce 100644 --- a/src/mir_app/src/skinicons.cpp +++ b/src/mir_app/src/skinicons.cpp @@ -71,7 +71,7 @@ static struct StandardIconDescription mainIcons[] = { SKINICON_OTHER_WINDOW, LPGEN("Window"), -IDI_WINDOW }, // 32 { SKINICON_OTHER_WINDOWS, LPGEN("System"), -IDI_WINDOWS }, // 33 { SKINICON_OTHER_ACCMGR, LPGEN("Accounts"), -IDI_ACCMGR }, // 34 - { SKINICON_OTHER_SHOWHIDE, LPGEN("Show/Hide"), -IDI_SHOWHIDE }, // 35 + { SKINICON_OTHER_SHOWHIDE, LPGEN("Show/Hide"), -IDI_SHOWHIDE }, // 35 { SKINICON_OTHER_EXIT, LPGEN("Exit"), -IDI_EXIT }, // 36 { SKINICON_OTHER_MAINMENU, LPGEN("Main menu"), -IDI_MAINMENU }, // 37 { SKINICON_OTHER_STATUS, LPGEN("Status"), -IDI_ONLINE }, // 38 @@ -83,14 +83,15 @@ static struct StandardIconDescription mainIcons[] = { SKINICON_OTHER_LOADEDGRAY, LPGEN("Running core plugin"), -IDI_LOADED_GRAY }, // 44 { SKINICON_OTHER_NOTLOADEDGRAY, LPGEN("Non-loadable plugin"), -IDI_NOTLOADED_GRAY }, // 45 { SKINICON_OTHER_FRAME, LPGEN("Frames"), -IDI_FRAME }, // 46 - { SKINICON_AUTH_ADD, LPGEN("Add to list"), -IDI_AUTH_ADD }, // 47 - { SKINICON_AUTH_REQUEST, LPGEN("Request authorization"), -IDI_AUTH_REQUEST }, // 48 - { SKINICON_AUTH_GRANT, LPGEN("Grant authorization"), -IDI_AUTH_GRANT }, // 49 - { SKINICON_AUTH_REVOKE, LPGEN("Revoke authorization"), -IDI_AUTH_REVOKE }, // 50 - { SKINICON_FATAL, LPGEN("Fatal error"), -IDI_MFATAL }, - { SKINICON_ERROR, LPGEN("Error"), -IDI_MERROR }, - { SKINICON_WARNING, LPGEN("Warning"), -IDI_MWARNING }, - { SKINICON_INFORMATION, LPGEN("Information"), -IDI_MINFO }, + { SKINICON_OTHER_GROUPADD, LPGEN("Add group"), -IDI_ADDGROUP }, // 47 + { SKINICON_AUTH_ADD, LPGEN("Add to list"), -IDI_AUTH_ADD }, // 48 + { SKINICON_AUTH_REQUEST, LPGEN("Request authorization"), -IDI_AUTH_REQUEST }, // 49 + { SKINICON_AUTH_GRANT, LPGEN("Grant authorization"), -IDI_AUTH_GRANT }, // 50 + { SKINICON_AUTH_REVOKE, LPGEN("Revoke authorization"), -IDI_AUTH_REVOKE }, // 51 + { SKINICON_FATAL, LPGEN("Fatal error"), -IDI_MFATAL }, // 52 + { SKINICON_ERROR, LPGEN("Error"), -IDI_MERROR }, // 53 + { SKINICON_WARNING, LPGEN("Warning"), -IDI_MWARNING }, // 54 + { SKINICON_INFORMATION, LPGEN("Information"), -IDI_MINFO }, // 55 { SKINICON_OTHER_VISIBLE_ALL, LPGEN("Always visible"), -IDI_ALWAYSVIS, 0, LPGEN("Contact list") }, { SKINICON_OTHER_INVISIBLE_ALL, LPGEN("Always invisible"), -IDI_NEVERVIS, 0, LPGEN("Contact list") }, -- cgit v1.2.3