5

I have subclassed NSWindow in a NSDocument application in order to receive keyDown events.

I have used the following code in my subclasss...

- (void)keyDown:(NSEvent *)theEvent {

    NSLog(@"keyDown!");

    if ([theEvent modifierFlags] & NSAlternateKeyMask) {
        NSLog(@"Alt key Down!");
    }
    else
        [super keyDown:theEvent];
}

I'm receiving key events when non-modifier keys are pressed! I'm also receiving "Alt Key is Down" when I press alt+z for example (alt+non-modifierkey).

The issue here is that I want to handle the event when just the alt/option key is pressed alone, without in combination with other keys and -keyDown: does not get called! What am I missing ?

Thanks...

Vassilis
  • 2,878
  • 1
  • 28
  • 43

2 Answers2

7

You could catch the Alt/Option key alone in -flagsChanged: instead of -keyDown:.

-(void)flagsChanged:(NSEvent*)theEvent {
    if ([theEvent modifierFlags] & NSAlternateKeyMask) {
        NSLog(@"Alt key Down (again)!");
    }
}
kennytm
  • 510,854
  • 105
  • 1,084
  • 1,005
0

You can do like this:

-(void)flagsChanged:(NSEvent*)theEvent {
    [super flagsChanged:theEvent];
    if ((([theEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask) & NSAlternateKeyMask) > 0) {
        NSLog(@"Alt key Down (again)!");
    }
}
Peter Lapisu
  • 19,915
  • 16
  • 123
  • 179