From 8400a61bf09e0ee78cbc337988f82e248de1b083 Mon Sep 17 00:00:00 2001 From: wonfen Date: Thu, 20 Feb 2025 07:03:28 +0800 Subject: [PATCH] refactor: Simplify tray icon event handling across platforms --- src-tauri/src/core/tray/mod.rs | 89 +++++++++++++------------------ src-tauri/tauri.linux.conf.json | 3 +- src-tauri/tauri.windows.conf.json | 8 +++ 3 files changed, 45 insertions(+), 55 deletions(-) diff --git a/src-tauri/src/core/tray/mod.rs b/src-tauri/src/core/tray/mod.rs index 04cb10d9..02afdeea 100644 --- a/src-tauri/src/core/tray/mod.rs +++ b/src-tauri/src/core/tray/mod.rs @@ -68,64 +68,47 @@ impl Tray { pub fn create_systray(&self) -> Result<()> { let app_handle = handle::Handle::global().app_handle().unwrap(); + let tray_incon_id = TrayIconId::new("main"); + let tray = app_handle.tray_by_id(&tray_incon_id).unwrap(); - // 创建初始菜单 - let initial_menu = create_tray_menu( - &app_handle, - Some("rule"), - false, - false, - Vec::new(), - )?; + #[cfg(target_os = "macos")] + tray.set_show_menu_on_left_click(false)?; - // 使用 TrayIconBuilder 构建托盘 - let _tray = tauri::tray::TrayIconBuilder::::with_id(TrayIconId::new("main")) - .menu(&initial_menu) // 先设置菜单 - .show_menu_on_left_click(false) // 再禁用左键菜单 - .on_tray_icon_event(move |_tray, event| { - // 处理左键点击事件 - if let TrayIconEvent::Click { - button, - button_state: MouseButtonState::Down, - .. - } = event - { - match button { - // 左键点击 - MouseButton::Left => { - #[cfg(target_os = "macos")] - { - // 确保菜单不会显示 - let _ = _tray.set_show_menu_on_left_click(false); - } + tray.on_tray_icon_event(|_, event| { + let tray_event = { Config::verge().latest().tray_event.clone() }; + let tray_event: String = tray_event.unwrap_or("main_window".into()); - // 获取并执行自定义事件 - let tray_event = Config::verge() - .latest() - .tray_event - .clone() - .unwrap_or("main_window".into()); - - match tray_event.as_str() { - "system_proxy" => feat::toggle_system_proxy(), - "tun_mode" => feat::toggle_tun_mode(), - "main_window" => resolve::create_window(), - _ => {} - } - } - // 其他按钮点击不处理 - _ => {} - } + #[cfg(target_os = "macos")] + if let TrayIconEvent::Click { + button: MouseButton::Left, + button_state: MouseButtonState::Down, + .. + } = event + { + match tray_event.as_str() { + "system_proxy" => feat::toggle_system_proxy(), + "tun_mode" => feat::toggle_tun_mode(), + "main_window" => resolve::create_window(), + _ => {} } - }) - .on_menu_event(on_menu_event) - .build(&app_handle)?; - - // 初始化托盘状态 - self.update_menu()?; - self.update_icon(None)?; - self.update_tooltip()?; + } + #[cfg(not(target_os = "macos"))] + if let TrayIconEvent::Click { + button: MouseButton::Left, + button_state: MouseButtonState::Down, + .. + } = event + { + match tray_event.as_str() { + "system_proxy" => feat::toggle_system_proxy(), + "tun_mode" => feat::toggle_tun_mode(), + "main_window" => resolve::create_window(), + _ => {} + } + } + }); + tray.on_menu_event(on_menu_event); Ok(()) } diff --git a/src-tauri/tauri.linux.conf.json b/src-tauri/tauri.linux.conf.json index 7be1d181..db6fa1a9 100644 --- a/src-tauri/tauri.linux.conf.json +++ b/src-tauri/tauri.linux.conf.json @@ -33,8 +33,7 @@ }, "app": { "trayIcon": { - "iconPath": "icons/tray-icon.ico", - "iconAsTemplate": true + "iconPath": "icons/tray-icon.ico" } } } diff --git a/src-tauri/tauri.windows.conf.json b/src-tauri/tauri.windows.conf.json index bfbb8547..15ac61d0 100644 --- a/src-tauri/tauri.windows.conf.json +++ b/src-tauri/tauri.windows.conf.json @@ -19,5 +19,13 @@ "template": "./packages/windows/installer.nsi" } } + }, + "app": { + "trayIcon": { + "iconPath": "icons/tray-icon.ico", + "iconAsTemplate": true, + "showMenuOnLeftClick": false + }, + "windows": [] } }