From 6aaec3de5d1dd2d1fa3ed48347cc4bd7e5875a18 Mon Sep 17 00:00:00 2001 From: Tunglies Date: Wed, 12 Mar 2025 13:28:04 +0800 Subject: [PATCH] fix: windows different tray icon display --- src-tauri/src/core/tray/mod.rs | 66 ++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/src-tauri/src/core/tray/mod.rs b/src-tauri/src/core/tray/mod.rs index b621c29e..604fbeeb 100644 --- a/src-tauri/src/core/tray/mod.rs +++ b/src-tauri/src/core/tray/mod.rs @@ -2,13 +2,13 @@ use once_cell::sync::OnceCell; use tauri::tray::TrayIconBuilder; #[cfg(target_os = "macos")] pub mod speed_rate; -use crate::module::mihomo::Rate; use crate::{ cmd, config::Config, - feat, resolve, - utils::resolve::VERSION, - utils::{dirs, i18n::t}, + feat, + module::mihomo::Rate, + resolve, + utils::{dirs, i18n::t, resolve::VERSION}, }; use anyhow::Result; @@ -22,12 +22,10 @@ use parking_lot::RwLock; pub use speed_rate::{SpeedRate, Traffic}; #[cfg(target_os = "macos")] use std::sync::Arc; -use tauri::menu::{CheckMenuItem, IsMenuItem}; -use tauri::{App, AppHandle}; use tauri::{ - menu::{MenuEvent, MenuItem, PredefinedMenuItem, Submenu}, + menu::{CheckMenuItem, IsMenuItem, MenuEvent, MenuItem, PredefinedMenuItem, Submenu}, tray::{MouseButton, MouseButtonState, TrayIconEvent}, - Wry, + App, AppHandle, Wry, }; #[cfg(target_os = "macos")] use tokio::sync::broadcast; @@ -68,12 +66,14 @@ impl Tray { } pub fn create_systray(&self, app: &App) -> Result<()> { - let builder = TrayIconBuilder::with_id("main") - .icon(app.default_window_icon().unwrap().clone()) - .icon_as_template(false); + let builder = + TrayIconBuilder::with_id("main"); #[cfg(target_os = "macos")] - let builder = builder.show_menu_on_left_click(false); + let builder = builder + .icon(app.default_window_icon().unwrap().clone()) + .icon_as_template(false) + .show_menu_on_left_click(false); let tray = builder.build(app)?; @@ -229,7 +229,7 @@ impl Tray { { let enable_tray_speed = Config::verge().latest().enable_tray_speed.unwrap_or(true); let is_colorful = tray_icon == "colorful"; - + // 处理图标和速率 let final_icon_bytes = if enable_tray_speed { let rate = rate.or_else(|| { @@ -238,7 +238,7 @@ impl Tray { .as_ref() .and_then(|speed_rate| speed_rate.get_curent_rate()) }); - + // 使用新的方法渲染图标和速率 SpeedRate::add_speed_text(icon_bytes, rate)? } else { @@ -398,21 +398,24 @@ fn create_tray_menu( .collect::>() }) .unwrap_or_default(); - + let profile_menu_items: Vec> = profile_uid_and_name .iter() .map(|(profile_uid, profile_name)| { - let is_current_profile = Config::profiles().data().is_current_profile_index(profile_uid.to_string()); - CheckMenuItem::with_id( - app_handle, - &format!("profiles_{}", profile_uid), - t(&profile_name), - true, - is_current_profile, - None::<&str>, - ) - .unwrap() - }).collect(); + let is_current_profile = Config::profiles() + .data() + .is_current_profile_index(profile_uid.to_string()); + CheckMenuItem::with_id( + app_handle, + &format!("profiles_{}", profile_uid), + t(&profile_name), + true, + is_current_profile, + None::<&str>, + ) + .unwrap() + }) + .collect(); let profile_menu_items: Vec<&dyn IsMenuItem> = profile_menu_items .iter() .map(|item| item as &dyn IsMenuItem) @@ -458,12 +461,13 @@ fn create_tray_menu( .unwrap(); let profiles = &Submenu::with_id_and_items( - app_handle, - "profiles", + app_handle, + "profiles", t("Profiles"), - true, + true, &profile_menu_items, - ).unwrap(); + ) + .unwrap(); let system_proxy = &CheckMenuItem::with_id( app_handle, @@ -607,7 +611,7 @@ fn on_menu_event(_: &AppHandle, event: MenuEvent) { "quit" => { println!("quit"); feat::quit(Some(0)); - }, + } id if id.starts_with("profiles_") => { let profile_index = &id["profiles_".len()..]; feat::toggle_proxy_profile(profile_index.into());