feat(desktop): add 'global' flag to voice hotkey binding (default false)

This commit is contained in:
byGalax
2026-05-16 16:38:51 +02:00
parent bf87add18d
commit 69733168ed
+13 -40
View File
@@ -20,6 +20,13 @@ export interface VoiceHotkeyBinding {
shift: boolean; shift: boolean;
alt: boolean; alt: boolean;
enabled: boolean; enabled: boolean;
/**
* When true, the hotkey is registered as an OS-level shortcut and fires
* even when the app isn't focused. When false (default) the binding only
* fires from the window's keydown listener — so e.g. setting "M" as mute
* doesn't break typing "m" everywhere else on the system.
*/
global: boolean;
} }
export interface VoiceHotkeys { export interface VoiceHotkeys {
@@ -36,46 +43,11 @@ export interface VoiceHotkeys {
export type VoiceHotkeyKind = keyof VoiceHotkeys; export type VoiceHotkeyKind = keyof VoiceHotkeys;
const DEFAULTS: VoiceHotkeys = { const DEFAULTS: VoiceHotkeys = {
mute: { mute: { key: 'KeyM', keyLabel: 'Ctrl+Shift+M', ctrl: true, shift: true, alt: false, enabled: false, global: false },
key: 'KeyM', deafen: { key: 'KeyD', keyLabel: 'Ctrl+Shift+D', ctrl: true, shift: true, alt: false, enabled: false, global: false },
keyLabel: 'Ctrl+Shift+M', hangup: { key: 'KeyH', keyLabel: 'Ctrl+Shift+H', ctrl: true, shift: true, alt: false, enabled: false, global: false },
ctrl: true, screenShare: { key: 'KeyE', keyLabel: 'Ctrl+Shift+E', ctrl: true, shift: true, alt: false, enabled: false, global: false },
shift: true, video: { key: 'KeyV', keyLabel: 'Ctrl+Shift+V', ctrl: true, shift: true, alt: false, enabled: false, global: false },
alt: false,
enabled: false,
},
deafen: {
key: 'KeyD',
keyLabel: 'Ctrl+Shift+D',
ctrl: true,
shift: true,
alt: false,
enabled: false,
},
hangup: {
key: 'KeyH',
keyLabel: 'Ctrl+Shift+H',
ctrl: true,
shift: true,
alt: false,
enabled: false,
},
screenShare: {
key: 'KeyE',
keyLabel: 'Ctrl+Shift+E',
ctrl: true,
shift: true,
alt: false,
enabled: false,
},
video: {
key: 'KeyV',
keyLabel: 'Ctrl+Shift+V',
ctrl: true,
shift: true,
alt: false,
enabled: false,
},
}; };
type Listener = (s: VoiceHotkeys) => void; type Listener = (s: VoiceHotkeys) => void;
@@ -93,6 +65,7 @@ function validateBinding(raw: unknown, fallback: VoiceHotkeyBinding): VoiceHotke
shift: typeof b.shift === 'boolean' ? b.shift : fallback.shift, shift: typeof b.shift === 'boolean' ? b.shift : fallback.shift,
alt: typeof b.alt === 'boolean' ? b.alt : fallback.alt, alt: typeof b.alt === 'boolean' ? b.alt : fallback.alt,
enabled: typeof b.enabled === 'boolean' ? b.enabled : fallback.enabled, enabled: typeof b.enabled === 'boolean' ? b.enabled : fallback.enabled,
global: typeof b.global === 'boolean' ? b.global : fallback.global,
}; };
} }