diff --git a/src/core_main.rs b/src/core_main.rs index 889015c0d..31b2ae118 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -163,7 +163,8 @@ pub fn core_main() -> Option> { #[cfg(target_os = "macos")] { std::thread::spawn(move || crate::start_server(true)); - // to-do: for flutter, starting tray not ready yet, or we can reuse sciter's tray implementation. + crate::tray::make_tray(); + return None; } #[cfg(target_os = "linux")] { diff --git a/src/tray.rs b/src/tray.rs index 30bdc5a59..5064d96dc 100644 --- a/src/tray.rs +++ b/src/tray.rs @@ -173,3 +173,35 @@ fn is_service_stoped() -> bool { false } } + +#[cfg(target_os = "macos")] +pub fn make_tray() { + use tray_item::TrayItem; + let mode = dark_light::detect(); + let mut icon_path = ""; + match mode { + dark_light::Mode::Dark => { + icon_path = "mac-tray-light.png"; + }, + dark_light::Mode::Light => { + icon_path = "mac-tray-dark.png"; + }, + } + if let Ok(mut tray) = TrayItem::new(&crate::get_app_name(), icon_path) { + tray.add_label(&format!( + "{} {}", + crate::get_app_name(), + crate::lang::translate("Service is running".to_owned()) + )) + .ok(); + + let inner = tray.inner_mut(); + inner.add_quit_item(&crate::lang::translate("Quit".to_owned())); + inner.display(); + } else { + loop { + std::thread::sleep(std::time::Duration::from_secs(3)); + } + } +} + diff --git a/src/ui.rs b/src/ui.rs index 2d7f8d70a..904d3ae2b 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -63,12 +63,7 @@ fn check_connect_status( pub fn start(args: &mut [String]) { #[cfg(target_os = "macos")] - if args.len() == 1 && args[0] == "--server" { - macos::make_tray(); - return; - } else { - macos::show_dock(); - } + macos::show_dock(); #[cfg(all(target_os = "linux", feature = "inline"))] { #[cfg(feature = "appimage")] diff --git a/src/ui/macos.rs b/src/ui/macos.rs index 3c7a7dcd0..488d1afc8 100644 --- a/src/ui/macos.rs +++ b/src/ui/macos.rs @@ -233,33 +233,7 @@ pub fn make_tray() { unsafe { set_delegate(None); } - use tray_item::TrayItem; - let mode = dark_light::detect(); - let mut icon_path = ""; - match mode { - dark_light::Mode::Dark => { - icon_path = "mac-tray-light.png"; - }, - dark_light::Mode::Light => { - icon_path = "mac-tray-dark.png"; - }, - } - if let Ok(mut tray) = TrayItem::new(&crate::get_app_name(), icon_path) { - tray.add_label(&format!( - "{} {}", - crate::get_app_name(), - crate::lang::translate("Service is running".to_owned()) - )) - .ok(); - - let inner = tray.inner_mut(); - inner.add_quit_item(&crate::lang::translate("Quit".to_owned())); - inner.display(); - } else { - loop { - std::thread::sleep(std::time::Duration::from_secs(3)); - } - } + crate::tray::make_tray(); } pub fn check_main_window() {