diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt index e8a15d52d2..b622870905 100644 --- a/.github/actions/spell-check/expect.txt +++ b/.github/actions/spell-check/expect.txt @@ -886,6 +886,7 @@ Ldr LEFTALIGN LEFTSCROLLBAR LEFTTEXT +leftclick LError LEVELID LExit diff --git a/src/runner/Resources.resx b/src/runner/Resources.resx index c8eb5f25cc..b94f84714e 100644 --- a/src/runner/Resources.resx +++ b/src/runner/Resources.resx @@ -173,6 +173,10 @@ Settings\tDouble-click Don't localize "\t" as that is what separates the click portion to be right aligned in the menu. + + Settings\tLeft-click + Don't localize "\t" as that is what separates the click portion to be right aligned in the menu. This is shown when Quick Access is disabled. + Documentation diff --git a/src/runner/tray_icon.cpp b/src/runner/tray_icon.cpp index 8fa892e312..d8684da5d0 100644 --- a/src/runner/tray_icon.cpp +++ b/src/runner/tray_icon.cpp @@ -40,6 +40,7 @@ namespace bool double_click_timer_running = false; bool double_clicked = false; POINT tray_icon_click_point; + std::optional last_quick_access_state; // Track the last known Quick Access state static ThemeListener theme_listener; static bool theme_adaptive_enabled = false; @@ -195,6 +196,18 @@ LRESULT __stdcall tray_icon_window_proc(HWND window, UINT message, WPARAM wparam case WM_RBUTTONUP: case WM_CONTEXTMENU: { + bool quick_access_enabled = get_general_settings().enableQuickAccess; + + // Reload menu if Quick Access state has changed or is first time + if (h_menu && (!last_quick_access_state.has_value() || quick_access_enabled != last_quick_access_state.value())) + { + DestroyMenu(h_menu); + h_menu = nullptr; + h_sub_menu = nullptr; + } + + last_quick_access_state = quick_access_enabled; + if (!h_menu) { h_menu = LoadMenu(reinterpret_cast(&__ImageBase), MAKEINTRESOURCE(ID_TRAY_MENU)); @@ -202,17 +215,39 @@ LRESULT __stdcall tray_icon_window_proc(HWND window, UINT message, WPARAM wparam if (h_menu) { static std::wstring settings_menuitem_label = GET_RESOURCE_STRING(IDS_SETTINGS_MENU_TEXT); + static std::wstring settings_menuitem_label_leftclick = GET_RESOURCE_STRING(IDS_SETTINGS_MENU_TEXT_LEFTCLICK); static std::wstring close_menuitem_label = GET_RESOURCE_STRING(IDS_CLOSE_MENU_TEXT); static std::wstring submit_bug_menuitem_label = GET_RESOURCE_STRING(IDS_SUBMIT_BUG_TEXT); static std::wstring documentation_menuitem_label = GET_RESOURCE_STRING(IDS_DOCUMENTATION_MENU_TEXT); static std::wstring quick_access_menuitem_label = GET_RESOURCE_STRING(IDS_QUICK_ACCESS_MENU_TEXT); - change_menu_item_text(ID_SETTINGS_MENU_COMMAND, settings_menuitem_label.data()); + + // Update Settings menu text based on Quick Access state + if (quick_access_enabled) + { + change_menu_item_text(ID_SETTINGS_MENU_COMMAND, settings_menuitem_label.data()); + } + else + { + change_menu_item_text(ID_SETTINGS_MENU_COMMAND, settings_menuitem_label_leftclick.data()); + } + change_menu_item_text(ID_CLOSE_MENU_COMMAND, close_menuitem_label.data()); change_menu_item_text(ID_REPORT_BUG_COMMAND, submit_bug_menuitem_label.data()); bool bug_report_disabled = is_bug_report_running(); EnableMenuItem(h_sub_menu, ID_REPORT_BUG_COMMAND, MF_BYCOMMAND | (bug_report_disabled ? MF_GRAYED : MF_ENABLED)); change_menu_item_text(ID_DOCUMENTATION_MENU_COMMAND, documentation_menuitem_label.data()); change_menu_item_text(ID_QUICK_ACCESS_MENU_COMMAND, quick_access_menuitem_label.data()); + + // Hide or show Quick Access menu item based on setting + if (!h_sub_menu) + { + h_sub_menu = GetSubMenu(h_menu, 0); + } + if (!quick_access_enabled) + { + // Remove Quick Access menu item when disabled + DeleteMenu(h_sub_menu, ID_QUICK_ACCESS_MENU_COMMAND, MF_BYCOMMAND); + } } if (!h_sub_menu) {