fix: enhance hotkey handling in lightweight mode and improve window management

This commit is contained in:
wonfen
2025-06-15 17:40:59 +08:00
parent 8bc451ff08
commit dd0e9d4e1b
3 changed files with 76 additions and 49 deletions

View File

@@ -153,66 +153,76 @@ impl Hotkey {
"=== Hotkey Dashboard Window Operation Start ===" "=== Hotkey Dashboard Window Operation Start ==="
); );
// 使用异步操作避免阻塞 // 检查是否在轻量模式下,如果是,需要同步处理
AsyncHandler::spawn(move || async move { if crate::module::lightweight::is_in_lightweight_mode() {
logging!( logging!(
debug, info,
Type::Hotkey, Type::Hotkey,
true, 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() { if let Some(window) = handle::Handle::global().get_window() {
// 如果窗口可见,则隐藏 // 如果窗口可见,则隐藏
match window.is_visible() { match window.is_visible() {
Ok(visible) => { Ok(visible) => {
if visible { if visible {
logging!( logging!(
info, info,
Type::Window, Type::Window,
true, true,
"Window is visible, hiding it" "Window is visible, hiding it"
); );
let _ = window.hide(); let _ = window.hide();
} else { } else {
// 如果窗口不可见,则显示 // 如果窗口不可见,则显示
logging!( logging!(
info, info,
Type::Window, Type::Window,
true, true,
"Window is hidden, showing it" "Window is hidden, showing it"
); );
if window.is_minimized().unwrap_or(false) { if window.is_minimized().unwrap_or(false) {
let _ = window.unminimize(); 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.show();
let _ = window.set_focus(); let _ = window.set_focus();
} }
} }
Err(e) => { } else {
logging!( // 如果窗口不存在,创建一个新窗口
warn, logging!(
Type::Window, info,
true, Type::Window,
"Failed to check window visibility: {}", true,
e "Window does not exist, creating a new one"
); );
let _ = window.show(); resolve::create_window(true);
let _ = window.set_focus();
}
} }
} else { });
// 如果窗口不存在,创建一个新窗口 }
logging!(
info,
Type::Window,
true,
"Window does not exist, creating a new one"
);
resolve::create_window(true);
}
});
logging!( logging!(
debug, debug,

View File

@@ -13,6 +13,19 @@ pub fn open_or_close_dashboard() {
println!("Attempting to open/close dashboard"); println!("Attempting to open/close dashboard");
log::info!(target: "app", "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() { if let Some(window) = handle::Handle::global().get_window() {
println!("Found existing window"); println!("Found existing window");
log::info!(target: "app", "Found existing window"); log::info!(target: "app", "Found existing window");

View File

@@ -119,6 +119,10 @@ pub fn exit_lightweight_mode() {
set_lightweight_mode(false); set_lightweight_mode(false);
logging!(info, Type::Lightweight, true, "正在退出轻量模式"); logging!(info, Type::Lightweight, true, "正在退出轻量模式");
// macOS激活策略
#[cfg(target_os = "macos")]
AppHandleManager::global().set_activation_policy_regular();
// 重置UI就绪状态 // 重置UI就绪状态
crate::utils::resolve::reset_ui_ready(); crate::utils::resolve::reset_ui_ready();
} }