diff --git a/src-tauri/src/core/hotkey.rs b/src-tauri/src/core/hotkey.rs index 0c38cc70..f75e7e92 100755 --- a/src-tauri/src/core/hotkey.rs +++ b/src-tauri/src/core/hotkey.rs @@ -211,28 +211,18 @@ impl Hotkey { let is_quit = matches!(function, HotkeyFunction::Quit); manager.on_shortcut(hotkey, move |_app_handle, hotkey_event, event| { - let hotkey_event_owned = *hotkey_event; - let event_owned = event; - let function_owned = function; - let is_quit_owned = is_quit; - - AsyncHandler::spawn(move || async move { - if event_owned.state == ShortcutState::Pressed { - logging!( - debug, - Type::Hotkey, - "Hotkey pressed: {:?}", - hotkey_event_owned - ); - - if hotkey_event_owned.key == Code::KeyQ && is_quit_owned { - if let Some(window) = handle::Handle::get_window() - && window.is_focused().unwrap_or(false) - { - logging!(debug, Type::Hotkey, "Executing quit function"); - Self::execute_function(function_owned); - } - } else { + if event.state == ShortcutState::Pressed { + logging!(debug, Type::Hotkey, "Hotkey pressed: {:?}", hotkey_event); + let hotkey = hotkey_event.key; + if hotkey == Code::KeyQ && is_quit { + if let Some(window) = handle::Handle::get_window() + && window.is_focused().unwrap_or(false) + { + logging!(debug, Type::Hotkey, "Executing quit function"); + Self::execute_function(function); + } + } else { + AsyncHandler::spawn(move || async move { logging!(debug, Type::Hotkey, "Executing function directly"); let is_enable_global_hotkey = Config::verge() @@ -242,19 +232,19 @@ impl Hotkey { .unwrap_or(true); if is_enable_global_hotkey { - Self::execute_function(function_owned); + Self::execute_function(function); } else { use crate::utils::window_manager::WindowManager; let is_visible = WindowManager::is_main_window_visible(); let is_focused = WindowManager::is_main_window_focused(); if is_focused && is_visible { - Self::execute_function(function_owned); + Self::execute_function(function); } } - } + }); } - }); + } })?; logging!( diff --git a/src-tauri/src/core/tray/mod.rs b/src-tauri/src/core/tray/mod.rs index e19491f3..246e3935 100644 --- a/src-tauri/src/core/tray/mod.rs +++ b/src-tauri/src/core/tray/mod.rs @@ -24,8 +24,6 @@ use futures::future::join_all; use parking_lot::Mutex; use smartstring::alias::String; use std::collections::HashMap; -use std::future::Future; -use std::pin::Pin; use std::sync::Arc; use std::{ sync::atomic::{AtomicBool, Ordering}, @@ -550,49 +548,34 @@ impl Tray { let tray = builder.build(app_handle)?; tray.on_tray_icon_event(|_app_handle, event| { - // 忽略移动、进入和离开等无需处理的事件,避免不必要的刷新 - match event { - TrayIconEvent::Move { .. } - | TrayIconEvent::Enter { .. } - | TrayIconEvent::Leave { .. } => { - return; - } - _ => {} - } + if let TrayIconEvent::Click { + button: MouseButton::Left, + button_state: MouseButtonState::Down, + .. + } = event + { + AsyncHandler::spawn(|| async move { + let tray_event = { Config::verge().await.latest_arc().tray_event.clone() }; + let tray_event: String = tray_event.unwrap_or_else(|| "main_window".into()); + logging!(debug, Type::Tray, "tray event: {tray_event:?}"); - AsyncHandler::spawn(|| async move { - let tray_event = { Config::verge().await.latest_arc().tray_event.clone() }; - let tray_event: String = tray_event.unwrap_or_else(|| "main_window".into()); - logging!(debug, Type::Tray, "tray event: {tray_event:?}"); - - if let TrayIconEvent::Click { - button: MouseButton::Left, - button_state: MouseButtonState::Down, - .. - } = event - { // 添加防抖检查,防止快速连击 if !should_handle_tray_click() { return; } - let fut: Pin + Send>> = match tray_event.as_str() { - "system_proxy" => Box::pin(async move { - feat::toggle_system_proxy().await; - }), - "tun_mode" => Box::pin(async move { - feat::toggle_tun_mode(None).await; - }), - "main_window" => Box::pin(async move { + match tray_event.as_str() { + "system_proxy" => feat::toggle_system_proxy().await, + "tun_mode" => feat::toggle_tun_mode(None).await, + "main_window" => { if !lightweight::exit_lightweight_mode().await { WindowManager::show_main_window().await; }; - }), - _ => Box::pin(async move {}), + } + _ => {} }; - fut.await; - } - }); + }); + } }); tray.on_menu_event(on_menu_event); Ok(())