1 #import "KeyBroadcaster.h"
2 #import <Carbon/Carbon.h>
4 @interface KeyBroadcaster (Private)
5 - (void)_broadcastKeyCode:(short)keyCode andModifiers:(long)modifiers;
8 @implementation KeyBroadcaster
10 - (void)keyDown:(NSEvent *)event
15 keyCode = [event keyCode];
16 modifiers = [event modifierFlags];
18 modifiers = [KeyBroadcaster cocoaToCarbonModifiers:modifiers];
19 [self _broadcastKeyCode:keyCode andModifiers:modifiers];
22 - (BOOL)performKeyEquivalent:(NSEvent *)event
28 - (void)_broadcastKeyCode:(short)keyCode andModifiers:(long)modifiers
30 NSNumber *keycodeNum = [NSNumber numberWithShort:keyCode];
31 NSNumber *modifiersNum = [NSNumber numberWithLong:modifiers];
32 NSDictionary *info = [NSDictionary dictionaryWithObjectsAndKeys:
33 keycodeNum, @"KeyCode", modifiersNum, @"Modifiers", nil, nil];
34 [[NSNotificationCenter defaultCenter] postNotificationName:@"KeyBroadcasterEvent" object:self userInfo:info];
37 + (long)cocoaToCarbonModifiers:(long)modifiers
39 long carbonModifiers = 0;
41 static long cocoaToCarbon[6][2] =
43 { NSCommandKeyMask, cmdKey },
44 { NSAlternateKeyMask, optionKey },
45 { NSControlKeyMask, controlKey },
46 { NSShiftKeyMask, shiftKey },
48 for (i = 0; i < 6; i++)
50 if (modifiers & cocoaToCarbon[i][0])
52 carbonModifiers += cocoaToCarbon[i][1];
55 return carbonModifiers;