diff --git a/src-tauri/src/core/handle.rs b/src-tauri/src/core/handle.rs index 0b487007..2bb51cc9 100644 --- a/src-tauri/src/core/handle.rs +++ b/src-tauri/src/core/handle.rs @@ -9,6 +9,7 @@ use tauri::{AppHandle, Emitter, Manager, WebviewWindow}; #[derive(Debug, Default, Clone)] pub struct Handle { pub app_handle: Arc>>, + pub is_exiting: Arc>, } impl Handle { @@ -17,6 +18,7 @@ impl Handle { HANDLE.get_or_init(|| Handle { app_handle: Arc::new(RwLock::new(None)), + is_exiting: Arc::new(RwLock::new(false)), }) } @@ -68,4 +70,13 @@ impl Handle { Tray::update_part()?; Ok(()) } + + pub fn set_is_exiting(&self) { + let mut is_exiting = self.is_exiting.write(); + *is_exiting = true; + } + + pub fn is_exiting(&self) -> bool { + *self.is_exiting.read() + } } diff --git a/src-tauri/src/feat.rs b/src-tauri/src/feat.rs index 5f626320..95634aef 100644 --- a/src-tauri/src/feat.rs +++ b/src-tauri/src/feat.rs @@ -118,12 +118,14 @@ pub fn toggle_tun_mode() { pub fn quit(code: Option) { let app_handle = handle::Handle::global().app_handle().unwrap(); + handle::Handle::global().set_is_exiting(); resolve::resolve_reset(); #[cfg(target_os = "macos")] tauri::async_runtime::block_on(async { resolve::restore_public_dns().await; }); + log_err!(handle::Handle::global().get_window().unwrap().close()); log_err!(app_handle.save_window_state(StateFlags::default())); app_handle.exit(code.unwrap_or(0)); } diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 658626a9..845b1e7c 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -151,6 +151,9 @@ pub fn run() { if label == "main" { match event { tauri::WindowEvent::CloseRequested { api, .. } => { + if core::handle::Handle::global().is_exiting() { + return; + } println!("closing window..."); api.prevent_close(); let window = core::handle::Handle::global().get_window().unwrap();