From 12df415dfd4ed70f9563ee0f18fe4c00b1b49891 Mon Sep 17 00:00:00 2001 From: huzibaca Date: Wed, 30 Oct 2024 18:52:53 +0800 Subject: [PATCH] feat: use tauri_plugin_window_state --- src-tauri/Cargo.lock | 16 ++++++++++++++++ src-tauri/Cargo.toml | 1 + src-tauri/capabilities/desktop.json | 4 +++- src-tauri/src/lib.rs | 5 +++++ src-tauri/src/utils/resolve.rs | 15 ++++++++++----- 5 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 7346320b..05d461a2 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1013,6 +1013,7 @@ dependencies = [ "tauri-plugin-process", "tauri-plugin-shell", "tauri-plugin-updater", + "tauri-plugin-window-state", "tokio", "url", "users", @@ -6603,6 +6604,21 @@ dependencies = [ "zip", ] +[[package]] +name = "tauri-plugin-window-state" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd1cef203a15b4772898e7bc8e57c1f34696e39848987dfcd294d51ba0525650" +dependencies = [ + "bitflags 2.6.0", + "log", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror", +] + [[package]] name = "tauri-runtime" version = "2.1.1" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 00b6da98..a2357865 100755 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -67,6 +67,7 @@ users = "0.11.0" [target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies] tauri-plugin-global-shortcut = "2.0.0-rc" tauri-plugin-updater = "2.0.0-rc" +tauri-plugin-window-state = "2.0.0-rc" #openssl [features] diff --git a/src-tauri/capabilities/desktop.json b/src-tauri/capabilities/desktop.json index fbb332b0..f50c5730 100755 --- a/src-tauri/capabilities/desktop.json +++ b/src-tauri/capabilities/desktop.json @@ -6,6 +6,8 @@ "permissions": [ "global-shortcut:default", "updater:default", - "deep-link:default" + "deep-link:default", + "window-state:default", + "window-state:default" ] } diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index e812bdf1..2c170830 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -9,6 +9,7 @@ use crate::core::hotkey; use crate::utils::{resolve, resolve::resolve_scheme, server}; #[cfg(target_os = "macos")] use tauri::Listener; +use tauri_plugin_window_state::{AppHandleExt, StateFlags}; pub fn run() { // 单例检测 @@ -32,6 +33,7 @@ pub fn run() { #[allow(unused_mut)] let mut builder = tauri::Builder::default() + .plugin(tauri_plugin_window_state::Builder::new().build()) .plugin(tauri_plugin_updater::Builder::new().build()) .plugin(tauri_plugin_clipboard_manager::init()) .plugin(tauri_plugin_process::init()) @@ -41,6 +43,7 @@ pub fn run() { .plugin(tauri_plugin_dialog::init()) .plugin(tauri_plugin_shell::init()) .plugin(tauri_plugin_deep_link::init()) + .plugin(tauri_plugin_window_state::Builder::default().build()) .setup(|app| { #[cfg(target_os = "linux")] { @@ -144,6 +147,8 @@ pub fn run() { tauri::WindowEvent::CloseRequested { api, .. } => { println!("closing window..."); api.prevent_close(); + let app_hanele = core::handle::Handle::global().app_handle().unwrap(); + let _ = app_hanele.save_window_state(StateFlags::default()); let window = core::handle::Handle::global().get_window().unwrap(); log_err!(window.hide()); } diff --git a/src-tauri/src/utils/resolve.rs b/src-tauri/src/utils/resolve.rs index e1e20de9..2c69a567 100644 --- a/src-tauri/src/utils/resolve.rs +++ b/src-tauri/src/utils/resolve.rs @@ -8,6 +8,7 @@ use percent_encoding::percent_decode_str; use serde_yaml::Mapping; use std::net::TcpListener; use tauri::{App, Manager}; +use tauri_plugin_window_state::{StateFlags, WindowExt}; use url::Url; //#[cfg(not(target_os = "linux"))] @@ -143,22 +144,26 @@ pub fn create_window() { .transparent(true) .inner_size(800.0, 636.0) .visible(false) - .build(); + .build().unwrap(); #[cfg(target_os = "macos")] - let _ = builder + let window = builder .decorations(true) .hidden_title(true) .title_bar_style(tauri::TitleBarStyle::Overlay) .inner_size(800.0, 642.0) - .build(); + .build() + .unwrap(); #[cfg(target_os = "linux")] - let _ = builder + let window = builder .decorations(false) .transparent(true) .inner_size(800.0, 642.0) - .build(); + .build() + .unwrap(); + + let _ = window.restore_state(StateFlags::all()); } pub async fn resolve_scheme(param: String) -> Result<()> {