diff --git a/src/platform/linux.rs b/src/platform/linux.rs index b468060d5..a49b71a5a 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -642,3 +642,12 @@ fn get_env(name: &str, uid: &str) -> String { "".to_owned() } } + +#[link(name = "gtk-3")] +extern "C" { + fn gtk_main_quit(); +} + +pub fn quit_gui() { + unsafe { gtk_main_quit() }; +} diff --git a/src/platform/macos.rs b/src/platform/macos.rs index 066a4520e..dabe11e49 100644 --- a/src/platform/macos.rs +++ b/src/platform/macos.rs @@ -519,7 +519,7 @@ pub fn is_installed() -> bool { false } -fn quit_gui() { +pub fn quit_gui() { use cocoa::appkit::NSApp; unsafe { let () = msg_send!(NSApp(), terminate: nil); diff --git a/src/platform/windows.rs b/src/platform/windows.rs index abc24ba25..341ba2cf4 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -1091,3 +1091,7 @@ oLink.Save allow_err!(std::fs::remove_file(shortcut)); Ok(()) } + +pub fn quit_gui() { + unsafe { PostQuitMessage(0) }; +} diff --git a/src/ui/cm.rs b/src/ui/cm.rs index 5d019a760..f7e56d6a0 100644 --- a/src/ui/cm.rs +++ b/src/ui/cm.rs @@ -95,7 +95,7 @@ impl ConnectionManager { fn remove_connection(&self, id: i32) { self.write().unwrap().senders.remove(&id); if self.read().unwrap().senders.len() == 0 { - std::process::exit(0); + crate::platform::quit_gui(); } self.call("removeConnection", &make_args!(id)); } @@ -414,7 +414,7 @@ async fn start_ipc(cm: ConnectionManager) { log::error!("Failed to start cm ipc server: {}", err); } } - std::process::exit(-1); + crate::platform::quit_gui(); } #[cfg(target_os = "linux")]