From 96c5df70f9fdf2886f4f7d43c8d5488270f20f7a Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 29 May 2025 15:37:40 +0300 Subject: fixes #5035 (Options -> Customize -> Menus: enable icons checkbox doesn't work on the fly) --- src/mir_app/src/genmenu.h | 1 + src/mir_app/src/menu_clist.cpp | 2 +- src/mir_app/src/menu_options.cpp | 13 +++++++++---- src/mir_app/src/menu_utils.cpp | 23 +++++++++++------------ 4 files changed, 22 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/mir_app/src/genmenu.h b/src/mir_app/src/genmenu.h index 50be9c0ada..851f08fb4e 100644 --- a/src/mir_app/src/genmenu.h +++ b/src/mir_app/src/genmenu.h @@ -106,6 +106,7 @@ struct TIntMenuObject : public MZeroedObject }; extern LIST g_menus; +extern bool g_bMenuIconsEnabled; #define SEPARATORPOSITIONINTERVAL 100000 diff --git a/src/mir_app/src/menu_clist.cpp b/src/mir_app/src/menu_clist.cpp index 67d9cff5f7..4a1ac8459c 100644 --- a/src/mir_app/src/menu_clist.cpp +++ b/src/mir_app/src/menu_clist.cpp @@ -442,7 +442,7 @@ static INT_PTR StatusMenuCheckService(WPARAM wParam, LPARAM) MENUITEMINFO mii = {}; mii.cbSize = sizeof(mii); mii.fMask = MIIM_STRING | MIIM_STATE; - if (pimi->iconId != -1) { + if (pimi->iconId != -1 && g_bMenuIconsEnabled) { mii.fMask |= MIIM_BITMAP; if (IsWinVerVistaPlus() && IsThemeActive()) { if (pimi->hBmp == nullptr) diff --git a/src/mir_app/src/menu_options.cpp b/src/mir_app/src/menu_options.cpp index 7121757627..a3696d331e 100644 --- a/src/mir_app/src/menu_options.cpp +++ b/src/mir_app/src/menu_options.cpp @@ -28,7 +28,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define STR_SEPARATOR L"-----------------------------------" -extern bool bIconsDisabled; extern int DefaultImageListColorDepth; void RebuildProtoMenus(); @@ -331,7 +330,7 @@ public: else m_radio1.SetState(true); - m_enableIcons.SetState(!bIconsDisabled); + m_enableIcons.SetState(g_bMenuIconsEnabled); //---- init menu object list -------------------------------------- for (auto &p : g_menus) @@ -345,8 +344,14 @@ public: bool OnApply() override { - bIconsDisabled = !m_enableIcons.IsChecked(); - db_set_b(0, "CList", "DisableMenuIcons", bIconsDisabled); + if (g_bMenuIconsEnabled != m_enableIcons.IsChecked()) { + g_bMenuIconsEnabled = m_enableIcons.IsChecked(); + db_set_b(0, "CList", "DisableMenuIcons", !g_bMenuIconsEnabled); + + Menu_GetMainMenu(); + Menu_GetStatusMenu(); + Menu_ReloadProtoMenus(); + } if (m_customName.IsChanged()) btnSet_Clicked(0); diff --git a/src/mir_app/src/menu_utils.cpp b/src/mir_app/src/menu_utils.cpp index dfd2685740..c92174f4c9 100644 --- a/src/mir_app/src/menu_utils.cpp +++ b/src/mir_app/src/menu_utils.cpp @@ -27,7 +27,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "plugins.h" static bool bIsGenMenuInited, bMenuLoaded = false; -bool bIconsDisabled; +bool g_bMenuIconsEnabled; static mir_cs csMenuHook; static int NextObjectId = 0x100, NextObjectMenuItemId = CLISTMENUIDMIN; @@ -151,7 +151,7 @@ TMO_IntMenuItem* MO_RecursiveWalkMenu(const TMO_LinkedList &pList, pfnWalkFunc f MIR_APP_DLL(BOOL) Menu_MeasureItem(LPARAM lParam) { - if (!bIsGenMenuInited) + if (!bIsGenMenuInited || !g_bMenuIconsEnabled) return FALSE; MEASUREITEMSTRUCT *mis = (MEASUREITEMSTRUCT *)lParam; @@ -174,7 +174,7 @@ MIR_APP_DLL(BOOL) Menu_MeasureItem(LPARAM lParam) MIR_APP_DLL(BOOL) Menu_DrawItem(LPARAM lParam) { - if (!bIsGenMenuInited) + if (!bIsGenMenuInited || !g_bMenuIconsEnabled) return FALSE; DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT *)lParam; @@ -397,7 +397,7 @@ MIR_APP_DLL(int) Menu_ModifyItem(HGENMENU hMenuItem, const wchar_t *ptszName, HA pimi->mi.flags = (iFlags & 0x07) | oldflags; } - if (hIcolib != INVALID_HANDLE_VALUE && !bIconsDisabled) { + if (hIcolib != INVALID_HANDLE_VALUE && g_bMenuIconsEnabled) { HANDLE hIcolibItem = IcoLib_IsManaged((HICON)hIcolib); if (hIcolibItem) { HICON hIcon = IcoLib_GetIconByHandle(hIcolibItem, false); @@ -860,7 +860,7 @@ MIR_APP_DLL(HGENMENU) Menu_AddItem(int hMenuObject, TMO_MenuItem *pmi, void *pUs else p->mi.name.w = mir_a2u(pmi->name.a); - if (pmi->hIcon != nullptr && !bIconsDisabled) { + if (pmi->hIcon != nullptr && g_bMenuIconsEnabled) { HANDLE hIcolibItem = IcoLib_IsManaged(pmi->hIcon); if (hIcolibItem != nullptr) { HICON hIcon = IcoLib_GetIconByHandle(hIcolibItem, false); @@ -1127,11 +1127,11 @@ static HMENU BuildRecursiveMenu(HMENU hMenu, const TMO_LinkedList &pList, WPARAM int i = WhereToPlace(hMenu, mi); - MENUITEMINFO mii = { 0 }; + MENUITEMINFO mii = {}; mii.cbSize = sizeof(mii); mii.dwItemData = (LPARAM)pmi; - mii.fMask = MIIM_DATA | MIIM_ID | MIIM_STRING; - if (pmi->iconId != -1) { + mii.fMask = MIIM_DATA | MIIM_ID | MIIM_STRING | MIIM_STATE; + if (pmi->iconId != -1 && g_bMenuIconsEnabled) { mii.fMask |= MIIM_BITMAP; if (IsWinVerVistaPlus() && IsThemeActive()) { if (pmi->hBmp == nullptr) @@ -1141,7 +1141,6 @@ static HMENU BuildRecursiveMenu(HMENU hMenu, const TMO_LinkedList &pList, WPARAM else mii.hbmpItem = HBMMENU_CALLBACK; } - mii.fMask |= MIIM_STATE; mii.fState = ((pmi->mi.flags & CMIF_GRAYED) ? MFS_GRAYED : MFS_ENABLED); mii.fState |= ((pmi->mi.flags & CMIF_CHECKED) ? MFS_CHECKED : MFS_UNCHECKED); if (pmi->mi.flags & CMIF_DEFAULT) @@ -1157,7 +1156,7 @@ static HMENU BuildRecursiveMenu(HMENU hMenu, const TMO_LinkedList &pList, WPARAM #ifdef PUTPOSITIONSONMENU if (GetKeyState(VK_CONTROL) & 0x8000) { wchar_t str[256]; - mir_snwprintf(str, L"%s (%d, id %x)", mi->name.a, mi->position, mii.dwItemData); + mir_snwprintf(str, L"%s (%d, id %x)", mi->name.w, mi->position, (int)mii.dwItemData); mii.dwTypeData = str; } #endif @@ -1171,7 +1170,7 @@ static HMENU BuildRecursiveMenu(HMENU hMenu, const TMO_LinkedList &pList, WPARAM #ifdef PUTPOSITIONSONMENU if (GetKeyState(VK_CONTROL) & 0x8000) { wchar_t str[256]; - mir_snwprintf(str, L"%s (%d, id %x)", mi->name.a, mi->position, mii.dwItemData); + mir_snwprintf(str, L"%s (%d, id %x)", mi->name.w, mi->position, (int)mii.dwItemData); mii.dwTypeData = str; } #endif @@ -1306,7 +1305,7 @@ static void CALLBACK RegisterAllIconsInIconLib() int InitGenMenu() { - bIconsDisabled = db_get_b(0, "CList", "DisableMenuIcons", 0) != 0; + g_bMenuIconsEnabled = !db_get_b(0, "CList", "DisableMenuIcons"); bIsGenMenuInited = true; HookEvent(ME_OPT_INITIALISE, GenMenuOptInit); -- cgit v1.2.3