feat(hotkey): macos support CMD+W to close window as default

This commit is contained in:
Tunglies 2025-03-20 13:01:58 +08:00
parent 618ba52bca
commit 84a5cf6b89
3 changed files with 18 additions and 1 deletions

View File

@ -148,6 +148,8 @@ impl Hotkey {
"toggle_system_proxy" => || feat::toggle_system_proxy(),
"toggle_tun_mode" => || feat::toggle_tun_mode(None),
"quit" => || feat::quit(Some(0)),
#[cfg(target_os = "macos")]
"hide" => || feat::hide(),
_ => {
println!("Invalid function: {}", func);
@ -181,7 +183,7 @@ impl Hotkey {
.latest()
.enable_global_hotkey
.unwrap_or(true);
if is_enable_global_hotkey {
f();
} else if let Some(window) = app_handle.get_webview_window("main") {

View File

@ -1,3 +1,5 @@
#[cfg(target_os = "macos")]
use crate::AppHandleManager;
use crate::{
config::Config,
core::{handle, sysopt, CoreManager},
@ -137,3 +139,13 @@ pub fn quit(code: Option<i32>) {
app_handle.exit(code.unwrap_or(0));
});
}
#[cfg(target_os = "macos")]
pub fn hide() {
if let Some(window) = handle::Handle::global().get_window() {
if window.is_visible().unwrap_or(false) {
AppHandleManager::global().set_activation_policy_accessory();
let _ = window.hide();
}
}
}

View File

@ -290,6 +290,7 @@ pub fn run() {
#[cfg(target_os = "macos")]
{
log_err!(hotkey::Hotkey::global().register("CMD+Q", "quit"));
log_err!(hotkey::Hotkey::global().register("CMD+W", "hide"));
}
#[cfg(not(target_os = "macos"))]
@ -310,6 +311,7 @@ pub fn run() {
#[cfg(target_os = "macos")]
{
log_err!(hotkey::Hotkey::global().unregister("CMD+Q"));
log_err!(hotkey::Hotkey::global().unregister("CMD+W"));
}
#[cfg(not(target_os = "macos"))]
{
@ -329,6 +331,7 @@ pub fn run() {
#[cfg(target_os = "macos")]
{
log_err!(hotkey::Hotkey::global().unregister("CMD+Q"));
log_err!(hotkey::Hotkey::global().unregister("CMD+W"));
}
#[cfg(not(target_os = "macos"))]