diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 5c9641e..90fb6a9 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -4408,6 +4408,21 @@ dependencies = [ "tokio", ] +[[package]] +name = "tauri-plugin-single-instance" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47c387d4d96690131dc46d1d2827df5c222b896a2bfeb15a16267229a55c50b5" +dependencies = [ + "serde", + "serde_json", + "tauri", + "thiserror 2.0.11", + "tracing", + "windows-sys 0.59.0", + "zbus", +] + [[package]] name = "tauri-plugin-store" version = "2.2.0" @@ -5999,6 +6014,7 @@ dependencies = [ "tauri-plugin-opener", "tauri-plugin-os", "tauri-plugin-shell", + "tauri-plugin-single-instance", "tauri-plugin-store", "tauri-plugin-upload", "time", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index b724ae7..d9a5aeb 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -31,3 +31,6 @@ tauri-plugin-log = "2" time = { version = "0.3", features = ["formatting"] } tauri-plugin-store = "2" +[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies] +tauri-plugin-single-instance = "2" + diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 4ec6ede..b3af4cf 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1,3 +1,5 @@ +use tauri::Manager; + // Learn more about Tauri commands at https://tauri.app/develop/calling-rust/ #[tauri::command] fn network_connect(network_id: &str) -> String { @@ -7,6 +9,23 @@ fn network_connect(network_id: &str) -> String { #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { tauri::Builder::default() + // NOTE: Currently, plugins run in the order they were added in to the builder, + // so `tauri_plugin_single_instance` needs to be registered first. + // See: https://github.com/tauri-apps/plugins-workspace/tree/v2/plugins/single-instance + .plugin(tauri_plugin_single_instance::init(|app, _args, _cwd| { + #[cfg(desktop)] + { + let windows = app.webview_windows(); + for (name, window) in windows { + if name == "main" { + window.show().unwrap(); + window.unminimize().unwrap(); + window.set_focus().unwrap(); + break; + } + } + } + })) .plugin(tauri_plugin_store::Builder::new().build()) .plugin( tauri_plugin_log::Builder::new()