Skip to content

Commit b712d23

Browse files
committed
fix: windows build error
1 parent 467ec32 commit b712d23

1 file changed

Lines changed: 25 additions & 18 deletions

File tree

src-tauri/src/api/hotkeys.rs

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,47 +4,55 @@ use global_hotkey::{
44
GlobalHotKeyEvent, GlobalHotKeyManager, HotKeyState,
55
};
66
use 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

1014
pub 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

Comments
 (0)