61 lines
1.4 KiB
Rust
61 lines
1.4 KiB
Rust
use serde::{Serialize, Deserialize};
|
|
|
|
use tauri::{
|
|
GlobalShortcutManager,
|
|
Manager,
|
|
async_runtime as rt,
|
|
};
|
|
|
|
use crate::app::APP;
|
|
use crate::config::HotkeysConfig;
|
|
use crate::errors::*;
|
|
use crate::terminal;
|
|
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
pub enum ShortcutAction {
|
|
ShowWindow,
|
|
LaunchTerminal,
|
|
}
|
|
|
|
|
|
pub fn exec_shortcut(action: ShortcutAction) {
|
|
match action {
|
|
ShortcutAction::ShowWindow => {
|
|
let app = APP.get().unwrap();
|
|
app.get_window("main")
|
|
.ok_or("Couldn't find application main window")
|
|
.map(|w| w.show().error_popup("Failed to show window"))
|
|
.error_popup("Failed to show window");
|
|
},
|
|
ShortcutAction::LaunchTerminal => {
|
|
rt::spawn(async {
|
|
terminal::launch(false).await.error_popup("Failed to launch terminal");
|
|
});
|
|
},
|
|
}
|
|
}
|
|
|
|
|
|
pub fn register_hotkeys(hotkeys: &HotkeysConfig) -> tauri::Result<()> {
|
|
let app = APP.get().unwrap();
|
|
let mut manager = app.global_shortcut_manager();
|
|
manager.unregister_all()?;
|
|
|
|
if hotkeys.show_window.enabled {
|
|
manager.register(
|
|
&hotkeys.show_window.keys,
|
|
|| exec_shortcut(ShortcutAction::ShowWindow)
|
|
)?;
|
|
}
|
|
|
|
if hotkeys.launch_terminal.enabled {
|
|
manager.register(
|
|
&hotkeys.launch_terminal.keys,
|
|
|| exec_shortcut(ShortcutAction::LaunchTerminal)
|
|
)?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|