diff --git a/src/main/services/HotkeyService.ts b/src/main/services/HotkeyService.ts new file mode 100644 index 0000000..a7eed4d --- /dev/null +++ b/src/main/services/HotkeyService.ts @@ -0,0 +1,26 @@ +import { globalShortcut } from 'electron'; + +export interface HotkeyBinding { + accelerator: string; + onTrigger: () => void; +} + +export class HotkeyService { + private registered: string[] = []; + + register(binding: HotkeyBinding): { ok: boolean; reason?: string } { + const accel = binding.accelerator; + if (globalShortcut.isRegistered(accel)) { + return { ok: false, reason: `${accel} already registered by another app` }; + } + const ok = globalShortcut.register(accel, binding.onTrigger); + if (!ok) return { ok: false, reason: `failed to register ${accel}` }; + this.registered.push(accel); + return { ok: true }; + } + + unregisterAll(): void { + for (const a of this.registered) globalShortcut.unregister(a); + this.registered = []; + } +}