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 | 
