feat: update systray creation to use TrayIconBuilder and pass app reference

fix: macos systray duplicated icon
This commit is contained in:
Tunglies 2025-03-12 13:04:15 +08:00
parent 832a0ac281
commit 39d811cc62
3 changed files with 11 additions and 14 deletions

View File

@ -1,4 +1,5 @@
use once_cell::sync::OnceCell; use once_cell::sync::OnceCell;
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::module::mihomo::Rate;
@ -22,10 +23,10 @@ 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::menu::{CheckMenuItem, IsMenuItem};
use tauri::AppHandle; use tauri::{App, AppHandle};
use tauri::{ use tauri::{
menu::{MenuEvent, MenuItem, PredefinedMenuItem, Submenu}, menu::{MenuEvent, MenuItem, PredefinedMenuItem, Submenu},
tray::{MouseButton, MouseButtonState, TrayIconEvent, TrayIconId}, tray::{MouseButton, MouseButtonState, TrayIconEvent},
Wry, Wry,
}; };
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
@ -66,13 +67,15 @@ impl Tray {
Ok(()) Ok(())
} }
pub fn create_systray(&self) -> Result<()> { pub fn create_systray(&self, app: &App) -> Result<()> {
let app_handle = handle::Handle::global().app_handle().unwrap(); let builder = TrayIconBuilder::with_id("main")
let tray_incon_id = TrayIconId::new("main"); .icon(app.default_window_icon().unwrap().clone())
let tray = app_handle.tray_by_id(&tray_incon_id).unwrap(); .icon_as_template(false);
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
tray.set_show_menu_on_left_click(false)?; let builder = builder.show_menu_on_left_click(false);
let tray = builder.build(app)?;
tray.on_tray_icon_event(|_, event| { tray.on_tray_icon_event(|_, event| {
let tray_event = { Config::verge().latest().tray_event.clone() }; let tray_event = { Config::verge().latest().tray_event.clone() };

View File

@ -96,7 +96,7 @@ pub async fn resolve_setup(app: &mut App) {
log::trace!(target: "app", "init system tray"); log::trace!(target: "app", "init system tray");
log_err!(tray::Tray::global().init()); log_err!(tray::Tray::global().init());
log_err!(tray::Tray::global().create_systray()); log_err!(tray::Tray::global().create_systray(app));
log_err!(sysopt::Sysopt::global().update_sysproxy().await); log_err!(sysopt::Sysopt::global().update_sysproxy().await);
log_err!(sysopt::Sysopt::global().init_guard_sysproxy()); log_err!(sysopt::Sysopt::global().init_guard_sysproxy());

View File

@ -30,11 +30,5 @@
} }
} }
} }
},
"app": {
"trayIcon": {
"iconPath": "icons/tray-icon-mono.ico",
"iconAsTemplate": true
}
} }
} }