mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-01-29 08:45:41 +08:00
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:
@@ -439,7 +439,7 @@ impl IVerge {
|
||||
webdav_password: None,
|
||||
enable_tray_speed: Some(false),
|
||||
// enable_tray_icon: Some(true),
|
||||
tray_inline_proxy_groups: Some(false),
|
||||
tray_inline_proxy_groups: Some(true),
|
||||
enable_global_hotkey: Some(true),
|
||||
enable_auto_light_weight_mode: Some(false),
|
||||
auto_light_weight_minutes: Some(10),
|
||||
|
||||
@@ -36,6 +36,7 @@ define_menu! {
|
||||
rule_mode => RULE_MODE, "tray_rule_mode", "tray.ruleMode",
|
||||
global_mode => GLOBAL_MODE, "tray_global_mode", "tray.globalMode",
|
||||
direct_mode => DIRECT_MODE, "tray_direct_mode", "tray.directMode",
|
||||
outbound_modes => OUTBOUND_MODES, "tray_outbound_modes", "tray.outboundModes",
|
||||
profiles => PROFILES, "tray_profiles", "tray.profiles",
|
||||
proxies => PROXIES, "tray_proxies", "tray.proxies",
|
||||
system_proxy => SYSTEM_PROXY, "tray_system_proxy", "tray.systemProxy",
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user