@@ -4,47 +4,55 @@ use global_hotkey::{
44 GlobalHotKeyEvent , GlobalHotKeyManager , HotKeyState ,
55} ;
66use std:: str:: FromStr ;
7- use tauri:: { AppHandle , Listener , Manager } ;
8- use std:: sync:: Arc ;
7+ use std:: sync:: Mutex ;
8+ use tauri:: { AppHandle , Manager , Listener } ;
9+
10+ lazy_static:: lazy_static! {
11+ static ref HOTKEY_MANAGER : Mutex <Option <GlobalHotKeyManager >> = Mutex :: new( None ) ;
12+ }
913
1014pub fn setup ( app_handle : tauri:: AppHandle ) {
1115 let app_handle_clone = app_handle. clone ( ) ;
1216
13- let manager = Arc :: new ( GlobalHotKeyManager :: new ( ) . expect ( "Failed to initialize hotkey manager" ) ) ;
14- let manager_clone = manager. clone ( ) ;
15- let manager_clone2 = manager. clone ( ) ;
17+ let manager = GlobalHotKeyManager :: new ( ) . expect ( "Failed to initialize hotkey manager" ) ;
18+ * HOTKEY_MANAGER . lock ( ) . unwrap ( ) = Some ( manager) ;
1619
1720 let rt = app_handle. state :: < tokio:: runtime:: Runtime > ( ) ;
1821 let initial_keybind = rt. block_on ( crate :: api:: database:: get_keybind ( app_handle_clone. clone ( ) ) )
1922 . expect ( "Failed to get initial keybind" ) ;
2023 let initial_shortcut = initial_keybind. join ( "+" ) ;
2124
22- let initial_shortcut_clone = initial_shortcut. clone ( ) ;
25+ let initial_shortcut_for_update = initial_shortcut. clone ( ) ;
26+ let initial_shortcut_for_save = initial_shortcut. clone ( ) ;
2327
24- if let Err ( e) = register_shortcut ( & manager , & initial_shortcut) {
28+ if let Err ( e) = register_shortcut ( & initial_shortcut) {
2529 eprintln ! ( "Error registering initial shortcut: {:?}" , e) ;
2630 }
2731
2832 app_handle. listen ( "update-shortcut" , move |event| {
2933 let payload_str = event. payload ( ) . to_string ( ) ;
3034
31- if let Ok ( old_hotkey) = parse_hotkey ( & initial_shortcut_clone) {
32- let _ = manager_clone. unregister ( old_hotkey) ;
35+ if let Ok ( old_hotkey) = parse_hotkey ( & initial_shortcut_for_update) {
36+ if let Some ( manager) = HOTKEY_MANAGER . lock ( ) . unwrap ( ) . as_ref ( ) {
37+ let _ = manager. unregister ( old_hotkey) ;
38+ }
3339 }
3440
35- if let Err ( e) = register_shortcut ( & manager_clone , & payload_str) {
41+ if let Err ( e) = register_shortcut ( & payload_str) {
3642 eprintln ! ( "Error re-registering shortcut: {:?}" , e) ;
3743 }
3844 } ) ;
3945
4046 app_handle. listen ( "save_keybind" , move |event| {
4147 let payload_str = event. payload ( ) . to_string ( ) ;
4248
43- if let Ok ( old_hotkey) = parse_hotkey ( & initial_shortcut) {
44- let _ = manager_clone2. unregister ( old_hotkey) ;
49+ if let Ok ( old_hotkey) = parse_hotkey ( & initial_shortcut_for_save) {
50+ if let Some ( manager) = HOTKEY_MANAGER . lock ( ) . unwrap ( ) . as_ref ( ) {
51+ let _ = manager. unregister ( old_hotkey) ;
52+ }
4553 }
4654
47- if let Err ( e) = register_shortcut ( & manager_clone2 , & payload_str) {
55+ if let Err ( e) = register_shortcut ( & payload_str) {
4856 eprintln ! ( "Error registering saved shortcut: {:?}" , e) ;
4957 }
5058 } ) ;
@@ -67,12 +75,11 @@ pub fn setup(app_handle: tauri::AppHandle) {
6775 } ) ;
6876}
6977
70- fn register_shortcut (
71- manager : & Arc < GlobalHotKeyManager > ,
72- shortcut : & str ,
73- ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
78+ fn register_shortcut ( shortcut : & str ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
7479 let hotkey = parse_hotkey ( shortcut) ?;
75- manager. register ( hotkey) ?;
80+ if let Some ( manager) = HOTKEY_MANAGER . lock ( ) . unwrap ( ) . as_ref ( ) {
81+ manager. register ( hotkey) ?;
82+ }
7683 Ok ( ( ) )
7784}
7885
0 commit comments