feat: tray menu enhance (#5412)

* feat(tray): move outbound modes into a dedicated submenu

* refactor: Enable 'Show Proxy Groups Inline' by default

* refactor(tray): move `copyEnv` to `more` submenu
This commit is contained in:
Sline
2025-11-12 14:10:20 +08:00
committed by GitHub
parent 2ea22feb95
commit 2a2de29224
17 changed files with 78 additions and 13 deletions

View File

@@ -870,7 +870,7 @@ async fn create_tray_menu(
});
let verge_settings = Config::verge().await.latest_arc();
let show_proxy_groups_inline = verge_settings.tray_inline_proxy_groups.unwrap_or(false);
let show_proxy_groups_inline = verge_settings.tray_inline_proxy_groups.unwrap_or(true);
let version = env!("CARGO_PKG_VERSION");
@@ -895,6 +895,13 @@ async fn create_tray_menu(
hotkeys.get("open_or_close_dashboard").map(|s| s.as_str()),
)?;
let current_mode_text = match current_proxy_mode {
"global" => rust_i18n::t!("tray.global"),
"direct" => rust_i18n::t!("tray.direct"),
_ => rust_i18n::t!("tray.rule"),
};
let outbound_modes_label = format!("{} ({})", texts.outbound_modes, current_mode_text);
let rule_mode = &CheckMenuItem::with_id(
app_handle,
MenuIds::RULE_MODE,
@@ -922,6 +929,18 @@ async fn create_tray_menu(
hotkeys.get("clash_mode_direct").map(|s| s.as_str()),
)?;
let outbound_modes = &Submenu::with_id_and_items(
app_handle,
MenuIds::OUTBOUND_MODES,
outbound_modes_label.as_str(),
true,
&[
rule_mode as &dyn IsMenuItem<Wry>,
global_mode as &dyn IsMenuItem<Wry>,
direct_mode as &dyn IsMenuItem<Wry>,
],
)?;
let profiles = &Submenu::with_id_and_items(
app_handle,
MenuIds::PROFILES,
@@ -1072,6 +1091,7 @@ async fn create_tray_menu(
&texts.more,
true,
&[
copy_env as &dyn IsMenuItem<Wry>,
close_all_connections,
restart_clash,
restart_app,
@@ -1090,15 +1110,8 @@ async fn create_tray_menu(
let separator = &PredefinedMenuItem::separator(app_handle)?;
// 动态构建菜单项
let mut menu_items: Vec<&dyn IsMenuItem<Wry>> = vec![
open_window,
separator,
rule_mode,
global_mode,
direct_mode,
separator,
profiles,
];
let mut menu_items: Vec<&dyn IsMenuItem<Wry>> =
vec![open_window, outbound_modes, separator, profiles];
// 如果有代理节点,添加代理节点菜单
if show_proxy_groups_inline {
@@ -1115,7 +1128,6 @@ async fn create_tray_menu(
tun_mode as &dyn IsMenuItem<Wry>,
separator,
lightweight_mode as &dyn IsMenuItem<Wry>,
copy_env as &dyn IsMenuItem<Wry>,
open_dir as &dyn IsMenuItem<Wry>,
more as &dyn IsMenuItem<Wry>,
separator,