feat: add configurable global keyboard shortcut
This commit is contained in:
parent
d6a6d24054
commit
69f2bbe52e
1 changed files with 31 additions and 0 deletions
31
MyVoxtral/MyVoxtral/Utilities/GlobalShortcut.swift
Normal file
31
MyVoxtral/MyVoxtral/Utilities/GlobalShortcut.swift
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
import Cocoa
|
||||||
|
|
||||||
|
final class GlobalShortcut {
|
||||||
|
private var monitor: Any?
|
||||||
|
var onTrigger: (() -> Void)?
|
||||||
|
|
||||||
|
func register(keyCode: UInt16, modifiers: UInt) {
|
||||||
|
unregister()
|
||||||
|
guard keyCode != 0 || modifiers != 0 else { return }
|
||||||
|
|
||||||
|
let requiredFlags = NSEvent.ModifierFlags(rawValue: modifiers)
|
||||||
|
|
||||||
|
monitor = NSEvent.addGlobalMonitorForEvents(matching: .keyDown) { [weak self] event in
|
||||||
|
let mask: NSEvent.ModifierFlags = [.command, .option, .control, .shift]
|
||||||
|
if event.keyCode == keyCode && event.modifierFlags.intersection(mask) == requiredFlags {
|
||||||
|
self?.onTrigger?()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func unregister() {
|
||||||
|
if let monitor {
|
||||||
|
NSEvent.removeMonitor(monitor)
|
||||||
|
}
|
||||||
|
monitor = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
unregister()
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue