diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index e58ca2c..eae18aa 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -9,12 +9,12 @@ mod store; mod vscode; use store::AppState; -#[cfg(target_os = "macos")] -use tauri::RunEvent; use tauri::{ menu::{CheckMenuItem, Menu, MenuBuilder, MenuItem}, tray::{TrayIconBuilder, TrayIconEvent}, }; +#[cfg(target_os = "macos")] +use tauri::{ActivationPolicy, RunEvent}; use tauri::{Emitter, Manager}; /// 创建动态托盘菜单 @@ -116,6 +116,23 @@ fn create_tray_menu( .map_err(|e| format!("构建菜单失败: {}", e)) } +#[cfg(target_os = "macos")] +fn apply_tray_policy(app: &tauri::AppHandle, dock_visible: bool) { + let desired_policy = if dock_visible { + ActivationPolicy::Regular + } else { + ActivationPolicy::Accessory + }; + + if let Err(err) = app.set_dock_visibility(dock_visible) { + log::warn!("设置 Dock 显示状态失败: {}", err); + } + + if let Err(err) = app.set_activation_policy(desired_policy) { + log::warn!("设置激活策略失败: {}", err); + } +} + /// 处理托盘菜单事件 fn handle_tray_menu_event(app: &tauri::AppHandle, event_id: &str) { log::info!("处理托盘菜单事件: {}", event_id); @@ -130,6 +147,10 @@ fn handle_tray_menu_event(app: &tauri::AppHandle, event_id: &str) { let _ = window.unminimize(); let _ = window.show(); let _ = window.set_focus(); + #[cfg(target_os = "macos")] + { + apply_tray_policy(app, true); + } } } "quit" => { @@ -267,6 +288,10 @@ pub fn run() { { let _ = window.set_skip_taskbar(true); } + #[cfg(target_os = "macos")] + { + apply_tray_policy(&window.app_handle(), false); + } } else { window.app_handle().exit(0); } @@ -413,6 +438,7 @@ pub fn run() { let _ = window.unminimize(); let _ = window.show(); let _ = window.set_focus(); + apply_tray_policy(app_handle, true); } } _ => {}