From dd0e9d4e1bdffbf93aa6f32fc6b13000921ee6db Mon Sep 17 00:00:00 2001 From: wonfen Date: Sun, 15 Jun 2025 17:40:59 +0800 Subject: [PATCH] fix: enhance hotkey handling in lightweight mode and improve window management --- src-tauri/src/core/hotkey.rs | 108 +++++++++++++++------------- src-tauri/src/feat/window.rs | 13 ++++ src-tauri/src/module/lightweight.rs | 4 ++ 3 files changed, 76 insertions(+), 49 deletions(-) diff --git a/src-tauri/src/core/hotkey.rs b/src-tauri/src/core/hotkey.rs index b356ecde..b8f87d8f 100755 --- a/src-tauri/src/core/hotkey.rs +++ b/src-tauri/src/core/hotkey.rs @@ -153,66 +153,76 @@ impl Hotkey { "=== Hotkey Dashboard Window Operation Start ===" ); - // 使用异步操作避免阻塞 - AsyncHandler::spawn(move || async move { + // 检查是否在轻量模式下,如果是,需要同步处理 + if crate::module::lightweight::is_in_lightweight_mode() { logging!( - debug, + info, Type::Hotkey, true, - "Toggle dashboard window visibility" + "In lightweight mode, calling open_or_close_dashboard directly" ); + crate::feat::open_or_close_dashboard(); + } else { + AsyncHandler::spawn(move || async move { + logging!( + debug, + Type::Hotkey, + true, + "Toggle dashboard window visibility (async)" + ); - // 检查窗口是否存在 - if let Some(window) = handle::Handle::global().get_window() { - // 如果窗口可见,则隐藏 - match window.is_visible() { - Ok(visible) => { - if visible { - logging!( - info, - Type::Window, - true, - "Window is visible, hiding it" - ); - let _ = window.hide(); - } else { - // 如果窗口不可见,则显示 - logging!( - info, - Type::Window, - true, - "Window is hidden, showing it" - ); - if window.is_minimized().unwrap_or(false) { - let _ = window.unminimize(); + // 检查窗口是否存在 + if let Some(window) = handle::Handle::global().get_window() { + // 如果窗口可见,则隐藏 + match window.is_visible() { + Ok(visible) => { + if visible { + logging!( + info, + Type::Window, + true, + "Window is visible, hiding it" + ); + let _ = window.hide(); + } else { + // 如果窗口不可见,则显示 + logging!( + info, + Type::Window, + true, + "Window is hidden, showing it" + ); + if window.is_minimized().unwrap_or(false) { + let _ = window.unminimize(); + } + let _ = window.show(); + let _ = window.set_focus(); } + } + Err(e) => { + logging!( + warn, + Type::Window, + true, + "Failed to check window visibility: {}", + e + ); let _ = window.show(); let _ = window.set_focus(); } } - Err(e) => { - logging!( - warn, - Type::Window, - true, - "Failed to check window visibility: {}", - e - ); - let _ = window.show(); - let _ = window.set_focus(); - } + } else { + // 如果窗口不存在,创建一个新窗口 + logging!( + info, + Type::Window, + true, + "Window does not exist, creating a new one" + ); + resolve::create_window(true); } - } else { - // 如果窗口不存在,创建一个新窗口 - logging!( - info, - Type::Window, - true, - "Window does not exist, creating a new one" - ); - resolve::create_window(true); - } - }); + }); + } logging!( debug, diff --git a/src-tauri/src/feat/window.rs b/src-tauri/src/feat/window.rs index 0b15f8ae..cd3d95a2 100644 --- a/src-tauri/src/feat/window.rs +++ b/src-tauri/src/feat/window.rs @@ -13,6 +13,19 @@ pub fn open_or_close_dashboard() { println!("Attempting to open/close dashboard"); log::info!(target: "app", "Attempting to open/close dashboard"); + // 检查是否在轻量模式下 + if crate::module::lightweight::is_in_lightweight_mode() { + println!("Currently in lightweight mode, exiting lightweight mode"); + log::info!(target: "app", "Currently in lightweight mode, exiting lightweight mode"); + + crate::module::lightweight::exit_lightweight_mode(); + + println!("Creating new window after exiting lightweight mode"); + log::info!(target: "app", "Creating new window after exiting lightweight mode"); + resolve::create_window(true); + return; + } + if let Some(window) = handle::Handle::global().get_window() { println!("Found existing window"); log::info!(target: "app", "Found existing window"); diff --git a/src-tauri/src/module/lightweight.rs b/src-tauri/src/module/lightweight.rs index 93a03135..cf8b33c5 100644 --- a/src-tauri/src/module/lightweight.rs +++ b/src-tauri/src/module/lightweight.rs @@ -119,6 +119,10 @@ pub fn exit_lightweight_mode() { set_lightweight_mode(false); logging!(info, Type::Lightweight, true, "正在退出轻量模式"); + // macOS激活策略 + #[cfg(target_os = "macos")] + AppHandleManager::global().set_activation_policy_regular(); + // 重置UI就绪状态 crate::utils::resolve::reset_ui_ready(); }