diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 0aadaec..5485522 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -606,6 +606,7 @@ dependencies = [ "notify", "objc2", "objc2-app-kit", + "objc2-foundation", "regex", "reqwest 0.12.28", "rusqlite", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 389f64f..056928c 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -47,7 +47,8 @@ dbus = "0.9" [target.'cfg(target_os = "macos")'.dependencies] objc2 = "0.6" -objc2-app-kit = { version = "0.3", features = ["NSApplication", "NSEvent", "NSRunningApplication"] } +objc2-app-kit = { version = "0.3", features = ["NSApplication", "NSEvent", "NSRunningApplication", "NSStatusItem"] } +objc2-foundation = "0.3" [target.'cfg(windows)'.dependencies] windows-sys = { version = "0.59", features = [ diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index 1907270..4990057 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -1,5 +1,10 @@ use super::*; +#[cfg(target_os = "macos")] +use objc2_app_kit::NSStatusItemBehavior; +#[cfg(target_os = "macos")] +use objc2_foundation::NSString; + #[cfg(target_os = "macos")] const MACOS_TRAY_ID: &str = "macos-tray"; @@ -96,7 +101,7 @@ pub(crate) fn setup_macos_tray(app: &mut tauri::App) -> tauri::Resul let click_state = Arc::new(Mutex::new(MacosTrayClickState::default())); let double_click_interval = Duration::from_secs_f64(NSEvent::doubleClickInterval()); - TrayIconBuilder::with_id(MACOS_TRAY_ID) + let tray = TrayIconBuilder::with_id(MACOS_TRAY_ID) .icon( app.default_window_icon() .cloned() @@ -169,6 +174,13 @@ pub(crate) fn setup_macos_tray(app: &mut tauri::App) -> tauri::Resul }) .build(app)?; + tray.with_inner_tray_icon(|tray_icon| { + if let Some(status_item) = tray_icon.ns_status_item() { + status_item.setBehavior(NSStatusItemBehavior::RemovalAllowed); + status_item.setAutosaveName(Some(&NSString::from_str(MACOS_TRAY_ID))); + } + })?; + Ok(()) }