diff options
Diffstat (limited to 'Framework/MASHotKey.m')
| -rw-r--r-- | Framework/MASHotKey.m | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/Framework/MASHotKey.m b/Framework/MASHotKey.m new file mode 100644 index 0000000..7886440 --- /dev/null +++ b/Framework/MASHotKey.m @@ -0,0 +1,44 @@ +#import "MASHotKey.h" + +FourCharCode const MASHotKeySignature = 'MASS'; + +@interface MASHotKey () +@property(assign) EventHotKeyRef hotKeyRef; +@property(assign) UInt32 carbonID; +@end + +@implementation MASHotKey + +- (instancetype) initWithShortcut: (MASShortcut*) shortcut +{ + self = [super init]; + + static UInt32 CarbonHotKeyID = 0; + + _carbonID = ++CarbonHotKeyID; + EventHotKeyID hotKeyID = { .signature = MASHotKeySignature, .id = _carbonID }; + + OSStatus status = RegisterEventHotKey([shortcut carbonKeyCode], [shortcut carbonFlags], + hotKeyID, GetEventDispatcherTarget(), kEventHotKeyExclusive, &_hotKeyRef); + + if (status != noErr) { + return nil; + } + + return self; +} + ++ (instancetype) registeredHotKeyWithShortcut: (MASShortcut*) shortcut +{ + return [[self alloc] initWithShortcut:shortcut]; +} + +- (void) dealloc +{ + if (_hotKeyRef) { + UnregisterEventHotKey(_hotKeyRef); + _hotKeyRef = NULL; + } +} + +@end |
