mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-01-29 00:35:38 +08:00
fix: enhance hotkey handling in lightweight mode and improve window management
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user