@@ -4,18 +4,18 @@ use global_hotkey::{
44 GlobalHotKeyEvent , GlobalHotKeyManager , HotKeyState ,
55} ;
66use std:: str:: FromStr ;
7- use std:: sync :: Mutex ;
7+ use std:: cell :: RefCell ;
88use tauri:: { AppHandle , Manager , Listener } ;
99
10- lazy_static :: lazy_static ! {
11- static ref HOTKEY_MANAGER : Mutex <Option <GlobalHotKeyManager >> = Mutex :: new( None ) ;
10+ thread_local ! {
11+ static HOTKEY_MANAGER : RefCell <Option <GlobalHotKeyManager >> = RefCell :: new( None ) ;
1212}
1313
1414pub fn setup ( app_handle : tauri:: AppHandle ) {
1515 let app_handle_clone = app_handle. clone ( ) ;
1616
1717 let manager = GlobalHotKeyManager :: new ( ) . expect ( "Failed to initialize hotkey manager" ) ;
18- * HOTKEY_MANAGER . lock ( ) . unwrap ( ) = Some ( manager) ;
18+ HOTKEY_MANAGER . with ( |m| * m . borrow_mut ( ) = Some ( manager) ) ;
1919
2020 let rt = app_handle. state :: < tokio:: runtime:: Runtime > ( ) ;
2121 let initial_keybind = rt. block_on ( crate :: api:: database:: get_keybind ( app_handle_clone. clone ( ) ) )
@@ -33,9 +33,11 @@ pub fn setup(app_handle: tauri::AppHandle) {
3333 let payload_str = event. payload ( ) . to_string ( ) ;
3434
3535 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- }
36+ HOTKEY_MANAGER . with ( |manager| {
37+ if let Some ( manager) = manager. borrow ( ) . as_ref ( ) {
38+ let _ = manager. unregister ( old_hotkey) ;
39+ }
40+ } ) ;
3941 }
4042
4143 if let Err ( e) = register_shortcut ( & payload_str) {
@@ -47,9 +49,11 @@ pub fn setup(app_handle: tauri::AppHandle) {
4749 let payload_str = event. payload ( ) . to_string ( ) ;
4850
4951 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- }
52+ HOTKEY_MANAGER . with ( |manager| {
53+ if let Some ( manager) = manager. borrow ( ) . as_ref ( ) {
54+ let _ = manager. unregister ( old_hotkey) ;
55+ }
56+ } ) ;
5357 }
5458
5559 if let Err ( e) = register_shortcut ( & payload_str) {
@@ -77,10 +81,12 @@ pub fn setup(app_handle: tauri::AppHandle) {
7781
7882fn register_shortcut ( shortcut : & str ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
7983 let hotkey = parse_hotkey ( shortcut) ?;
80- if let Some ( manager) = HOTKEY_MANAGER . lock ( ) . unwrap ( ) . as_ref ( ) {
81- manager. register ( hotkey) ?;
82- }
83- Ok ( ( ) )
84+ HOTKEY_MANAGER . with ( |manager| {
85+ if let Some ( manager) = manager. borrow ( ) . as_ref ( ) {
86+ manager. register ( hotkey) ?;
87+ }
88+ Ok ( ( ) )
89+ } )
8490}
8591
8692fn parse_hotkey ( shortcut : & str ) -> Result < HotKey , Box < dyn std:: error:: Error > > {
0 commit comments