feat: manage windows with tauri window-state to address various window issues

This commit is contained in:
wonfen 2025-04-15 22:10:57 +08:00
parent 4ce376f830
commit 9d2dfe8d2f
6 changed files with 38 additions and 10 deletions

View File

@ -12,6 +12,12 @@
- 解锁测试报错信息
- Macos 快捷键关闭窗口无法启用自动轻量模式
- 静默启动异常窗口创建和关闭流程
- 使用 tauri window-state 管理窗口,尝试解决各种窗口异常
#### 新增了:
- 外部控制的开关
- 使用 socks 进行内核通信,以解决各种潜在的内核通信异常
## v2.2.3

View File

@ -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",

16
src-tauri/Cargo.lock generated
View File

@ -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"

View File

@ -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"] }

View File

@ -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)))]
{

View File

@ -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 {