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];
20 [self _broadcastKeyCode:keyCode andModifiers:modifiers];
24 - (BOOL)performKeyEquivalent:(NSEvent *)event
30 - (void)_broadcastKeyCode:(short)keyCode andModifiers:(long)modifiers
32 NSNumber *keycodeNum = [NSNumber numberWithShort:keyCode];
33 NSNumber *modifiersNum = [NSNumber numberWithLong:modifiers];
34 NSDictionary *info = [NSDictionary dictionaryWithObjectsAndKeys:
35 keycodeNum, @"KeyCode", modifiersNum, @"Modifiers", nil, nil];
36 [[NSNotificationCenter defaultCenter] postNotificationName:@"KeyBroadcasterEvent" object:self userInfo:info];
39 + (long)cocoaToCarbonModifiers:(long)modifiers
41 long carbonModifiers = 0;
43 static long cocoaToCarbon[6][2] =
45 { NSCommandKeyMask, cmdKey },
46 { NSAlternateKeyMask, optionKey },
47 { NSControlKeyMask, controlKey },
48 { NSShiftKeyMask, shiftKey },
50 for (i = 0; i < 6; i++)
52 if (modifiers & cocoaToCarbon[i][0])
54 carbonModifiers += cocoaToCarbon[i][1];
57 return carbonModifiers;