#import "ITKeyBroadcaster.h" #import "ITKeyCombo.h" #import NSString *ITKeyBroadcasterKeyEvent = @"ITKeyBroadcasterKeyEvent"; @implementation ITKeyBroadcaster - (void)_bcastKeyCode:(short)keyCode modifiers:(long)modifiers { ITKeyCombo *keyCombo = [ITKeyCombo keyComboWithKeyCode:keyCode modifiers:modifiers]; NSDictionary *userInfo = [NSDictionary dictionaryWithObject:keyCombo forKey:@"keyCombo"]; [[NSNotificationCenter defaultCenter] postNotificationName:ITKeyBroadcasterKeyEvent object:self userInfo:userInfo]; } - (void)_bcastEvent:(NSEvent *)event { short keyCode; long modifiers; keyCode = [event keyCode]; modifiers = [event modifierFlags]; modifiers = [[self class] cocoaModifiersAsCarbonModifiers:modifiers]; [self _bcastKeyCode:keyCode modifiers:modifiers]; } - (void)keyDown:(NSEvent *)event { [self _bcastEvent:event]; } - (BOOL)performKeyEquivalent:(NSEvent *)event { [self _bcastEvent:event]; return YES; } + (long)cocoaModifiersAsCarbonModifiers:(long)cocoaModifiers { static long cocoaToCarbon[6][2] = { { NSCommandKeyMask, cmdKey }, { NSAlternateKeyMask, optionKey }, { NSControlKeyMask, controlKey }, { NSShiftKeyMask, shiftKey }, { NSFunctionKeyMask, rightControlKey }, //{ NSAlphaShiftKeyMask, alphaLock }, //Ignore this? }; long carbonModifiers = 0; int i; for (i = 0;i < 6;i++) { if (cocoaModifiers & cocoaToCarbon[i][0]) { carbonModifiers += cocoaToCarbon[i][1]; } } return carbonModifiers; } @end