Added a commented-out line, template for when making builds for beta testers.
[MenuTunes.git] / KeyBroadcaster.m
1 #import "KeyBroadcaster.h"
2 #import <Carbon/Carbon.h>
3
4 @interface KeyBroadcaster (Private)
5 - (void)_broadcastKeyCode:(short)keyCode andModifiers:(long)modifiers;
6 @end
7
8 @implementation KeyBroadcaster
9
10 - (void)keyDown:(NSEvent *)event
11 {
12     short keyCode;
13     long modifiers;
14     
15     keyCode = [event keyCode];
16     modifiers = [event modifierFlags];
17     
18     modifiers = [KeyBroadcaster cocoaToCarbonModifiers:modifiers];
19     [self _broadcastKeyCode:keyCode andModifiers:modifiers];
20 }
21
22 - (BOOL)performKeyEquivalent:(NSEvent *)event
23 {
24     [self keyDown:event];
25     return YES;
26 }
27
28 - (void)_broadcastKeyCode:(short)keyCode andModifiers:(long)modifiers
29 {
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];
35 }
36
37 + (long)cocoaToCarbonModifiers:(long)modifiers
38 {
39     long carbonModifiers = 0;
40     int i;
41     static long cocoaToCarbon[6][2] = 
42     {
43         { NSCommandKeyMask, cmdKey },
44         { NSAlternateKeyMask, optionKey },
45         { NSControlKeyMask, controlKey },
46         { NSShiftKeyMask, shiftKey },
47     };
48     for (i = 0; i < 6; i++)
49     {
50         if (modifiers & cocoaToCarbon[i][0])
51         {
52             carbonModifiers += cocoaToCarbon[i][1];
53         }
54     }
55     return carbonModifiers;
56 }
57
58 @end