From fad73a281a203ab852e3eaf337e0c443929c7b6a Mon Sep 17 00:00:00 2001 From: wonfen Date: Tue, 15 Apr 2025 22:10:57 +0800 Subject: [PATCH] feat: manage windows with tauri window-state to address various window issues --- UPDATELOG.md | 6 ++++++ package.json | 1 + src-tauri/Cargo.lock | 16 ++++++++++++++++ src-tauri/Cargo.toml | 1 + src-tauri/src/lib.rs | 4 ++++ src-tauri/src/utils/resolve.rs | 20 ++++++++++---------- 6 files changed, 38 insertions(+), 10 deletions(-) diff --git a/UPDATELOG.md b/UPDATELOG.md index f9a3302e..ff6499a0 100644 --- a/UPDATELOG.md +++ b/UPDATELOG.md @@ -12,6 +12,12 @@ - 解锁测试报错信息 - Macos 快捷键关闭窗口无法启用自动轻量模式 - 静默启动异常窗口创建和关闭流程 + - 使用 tauri window-state 管理窗口,尝试解决各种窗口异常 + +#### 新增了: + - 外部控制的开关 + - 使用 socks 进行内核通信,以解决各种潜在的内核通信异常 + ## v2.2.3 diff --git a/package.json b/package.json index 130b433a..5d9c85a0 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "@tauri-apps/plugin-process": "^2.2.0", "@tauri-apps/plugin-shell": "2.2.0", "@tauri-apps/plugin-updater": "2.3.0", + "@tauri-apps/plugin-window-state": "^2.4.0", "@types/d3-shape": "^3.1.7", "@types/json-schema": "^7.0.15", "ahooks": "^3.8.4", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index aa4e6ce6..ab2b25f8 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1092,6 +1092,7 @@ dependencies = [ "tauri-plugin-process", "tauri-plugin-shell", "tauri-plugin-updater", + "tauri-plugin-window-state", "tempfile", "tokio", "tokio-tungstenite 0.26.2", @@ -7130,6 +7131,21 @@ dependencies = [ "zip", ] +[[package]] +name = "tauri-plugin-window-state" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a27a3fe49de72adbe0d84aee33c89a0b059722cd0b42aaeab29eaaee7f7535cd" +dependencies = [ + "bitflags 2.9.0", + "log", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror 2.0.12", +] + [[package]] name = "tauri-runtime" version = "2.5.0" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index d9746f93..0b96e80b 100755 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -61,6 +61,7 @@ tauri-plugin-process = "2.2.0" tauri-plugin-clipboard-manager = "2.2.2" tauri-plugin-deep-link = "2.2.0" tauri-plugin-devtools = "2.0.0" +tauri-plugin-window-state = "2.2.2" zip = "2.5.0" reqwest_dav = "0.1.15" aes-gcm = { version = "0.10.3", features = ["std"] } diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 4fcd7eff..946095eb 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -20,6 +20,7 @@ use tauri::Manager; use tauri_plugin_autostart::MacosLauncher; use tauri_plugin_deep_link::DeepLinkExt; use utils::logging::Type; +use tauri_plugin_window_state; /// A global singleton handle to the application. pub struct AppHandleManager { @@ -117,6 +118,9 @@ 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() + .with_state_flags(tauri_plugin_window_state::StateFlags::all()) + .build()) .setup(|app| { #[cfg(any(target_os = "linux", all(debug_assertions, windows)))] { diff --git a/src-tauri/src/utils/resolve.rs b/src-tauri/src/utils/resolve.rs index 261f0b04..fc58f40a 100644 --- a/src-tauri/src/utils/resolve.rs +++ b/src-tauri/src/utils/resolve.rs @@ -163,13 +163,14 @@ pub fn create_window(is_showup: bool) { tauri::WebviewUrl::App("index.html".into()), ) .title("Clash Verge") - .inner_size(890.0, 700.0) - .min_inner_size(620.0, 550.0) + .inner_size(900.0, 700.0) + .min_inner_size(650.0, 580.0) .decorations(false) .maximizable(true) .additional_browser_args("--enable-features=msWebView2EnableDraggableRegions --disable-features=OverscrollHistoryNavigation,msExperimentalScrolling") .transparent(true) .shadow(true) + .visible(true) .build(); #[cfg(target_os = "macos")] @@ -181,8 +182,9 @@ pub fn create_window(is_showup: bool) { .decorations(true) .hidden_title(true) .title_bar_style(tauri::TitleBarStyle::Overlay) - .inner_size(890.0, 700.0) - .min_inner_size(620.0, 550.0) + .inner_size(900.0, 700.0) + .min_inner_size(650.0, 580.0) + .visible(true) .build(); #[cfg(target_os = "linux")] @@ -193,17 +195,15 @@ pub fn create_window(is_showup: bool) { ) .title("Clash Verge") .decorations(false) - .inner_size(890.0, 700.0) - .min_inner_size(620.0, 550.0) + .inner_size(900.0, 700.0) + .min_inner_size(650.0, 580.0) .transparent(true) + .visible(true) .build(); match window { - Ok(window) => { + Ok(_) => { logging!(info, Type::Window, true, "Window created successfully"); - let _ = window.show(); - let _ = window.set_focus(); - // 标记前端UI已准备就绪,向前端发送启动完成事件 let app_handle_clone = app_handle.clone(); AsyncHandler::spawn(move || async move {