fix: windows different tray icon display

This commit is contained in:
Tunglies 2025-03-12 13:28:04 +08:00
parent 39d811cc62
commit 6aaec3de5d

View File

@ -2,13 +2,13 @@ use once_cell::sync::OnceCell;
use tauri::tray::TrayIconBuilder; use tauri::tray::TrayIconBuilder;
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
pub mod speed_rate; pub mod speed_rate;
use crate::module::mihomo::Rate;
use crate::{ use crate::{
cmd, cmd,
config::Config, config::Config,
feat, resolve, feat,
utils::resolve::VERSION, module::mihomo::Rate,
utils::{dirs, i18n::t}, resolve,
utils::{dirs, i18n::t, resolve::VERSION},
}; };
use anyhow::Result; use anyhow::Result;
@ -22,12 +22,10 @@ use parking_lot::RwLock;
pub use speed_rate::{SpeedRate, Traffic}; pub use speed_rate::{SpeedRate, Traffic};
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
use std::sync::Arc; use std::sync::Arc;
use tauri::menu::{CheckMenuItem, IsMenuItem};
use tauri::{App, AppHandle};
use tauri::{ use tauri::{
menu::{MenuEvent, MenuItem, PredefinedMenuItem, Submenu}, menu::{CheckMenuItem, IsMenuItem, MenuEvent, MenuItem, PredefinedMenuItem, Submenu},
tray::{MouseButton, MouseButtonState, TrayIconEvent}, tray::{MouseButton, MouseButtonState, TrayIconEvent},
Wry, App, AppHandle, Wry,
}; };
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
use tokio::sync::broadcast; use tokio::sync::broadcast;
@ -68,12 +66,14 @@ impl Tray {
} }
pub fn create_systray(&self, app: &App) -> Result<()> { pub fn create_systray(&self, app: &App) -> Result<()> {
let builder = TrayIconBuilder::with_id("main") let builder =
.icon(app.default_window_icon().unwrap().clone()) TrayIconBuilder::with_id("main");
.icon_as_template(false);
#[cfg(target_os = "macos")] #[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)?; let tray = builder.build(app)?;
@ -402,7 +402,9 @@ fn create_tray_menu(
let profile_menu_items: Vec<CheckMenuItem<Wry>> = profile_uid_and_name let profile_menu_items: Vec<CheckMenuItem<Wry>> = profile_uid_and_name
.iter() .iter()
.map(|(profile_uid, profile_name)| { .map(|(profile_uid, profile_name)| {
let is_current_profile = Config::profiles().data().is_current_profile_index(profile_uid.to_string()); let is_current_profile = Config::profiles()
.data()
.is_current_profile_index(profile_uid.to_string());
CheckMenuItem::with_id( CheckMenuItem::with_id(
app_handle, app_handle,
&format!("profiles_{}", profile_uid), &format!("profiles_{}", profile_uid),
@ -412,7 +414,8 @@ fn create_tray_menu(
None::<&str>, None::<&str>,
) )
.unwrap() .unwrap()
}).collect(); })
.collect();
let profile_menu_items: Vec<&dyn IsMenuItem<Wry>> = profile_menu_items let profile_menu_items: Vec<&dyn IsMenuItem<Wry>> = profile_menu_items
.iter() .iter()
.map(|item| item as &dyn IsMenuItem<Wry>) .map(|item| item as &dyn IsMenuItem<Wry>)
@ -463,7 +466,8 @@ fn create_tray_menu(
t("Profiles"), t("Profiles"),
true, true,
&profile_menu_items, &profile_menu_items,
).unwrap(); )
.unwrap();
let system_proxy = &CheckMenuItem::with_id( let system_proxy = &CheckMenuItem::with_id(
app_handle, app_handle,
@ -607,7 +611,7 @@ fn on_menu_event(_: &AppHandle, event: MenuEvent) {
"quit" => { "quit" => {
println!("quit"); println!("quit");
feat::quit(Some(0)); feat::quit(Some(0));
}, }
id if id.starts_with("profiles_") => { id if id.starts_with("profiles_") => {
let profile_index = &id["profiles_".len()..]; let profile_index = &id["profiles_".len()..];
feat::toggle_proxy_profile(profile_index.into()); feat::toggle_proxy_profile(profile_index.into());