diff options
Diffstat (limited to 'osdep')
-rw-r--r-- | osdep/macosx_application.m | 5 | ||||
-rw-r--r-- | osdep/macosx_application_objc.h | 2 | ||||
-rw-r--r-- | osdep/macosx_events.m | 16 |
3 files changed, 17 insertions, 6 deletions
diff --git a/osdep/macosx_application.m b/osdep/macosx_application.m index e561d54c13..fb20fbf2cc 100644 --- a/osdep/macosx_application.m +++ b/osdep/macosx_application.m @@ -93,11 +93,10 @@ static NSString *escape_loadfile_name(NSString *input) self.eventsResponder = [[[EventsResponder alloc] init] autorelease]; self.willStopOnOpenEvent = NO; - [NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask + [NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask|NSKeyUpMask handler:^(NSEvent *event) { - return [self.eventsResponder handleKeyDown:event]; + return [self.eventsResponder handleKey:event]; }]; - } return self; diff --git a/osdep/macosx_application_objc.h b/osdep/macosx_application_objc.h index 1af64dbcab..53d00b2ab4 100644 --- a/osdep/macosx_application_objc.h +++ b/osdep/macosx_application_objc.h @@ -22,7 +22,7 @@ @interface EventsResponder : NSObject <HIDRemoteDelegate> - (BOOL)handleMediaKey:(NSEvent *)event; -- (NSEvent *)handleKeyDown:(NSEvent *)event; +- (NSEvent *)handleKey:(NSEvent *)event; - (void)startAppleRemote; - (void)stopAppleRemote; - (void)startMediaKeys; diff --git a/osdep/macosx_events.m b/osdep/macosx_events.m index dfa43a0437..e09dc0af93 100644 --- a/osdep/macosx_events.m +++ b/osdep/macosx_events.m @@ -252,8 +252,10 @@ void cocoa_put_key_with_modifiers(int keycode, int modifiers) andMapping:keymap]; } -- (NSEvent*)handleKeyDown:(NSEvent *)event +- (NSEvent*)handleKey:(NSEvent *)event { + if ([event isARepeat]) return nil; + NSString *chars; if (RightAltPressed([event modifierFlags])) @@ -316,9 +318,19 @@ void cocoa_put_key_with_modifiers(int keycode, int modifiers) return mask; } +- (int)mapTypeModifiers:(NSEventType)type +{ + NSDictionary *map = @{ + @(NSKeyDown) : @(MP_KEY_STATE_DOWN), + @(NSKeyUp) : @(MP_KEY_STATE_UP), + }; + return [map[@(type)] intValue]; +} + - (int)keyModifierMask:(NSEvent *)event { - return [self mapKeyModifiers:[event modifierFlags]]; + return [self mapKeyModifiers:[event modifierFlags]] | + [self mapTypeModifiers:[event type]]; } -(BOOL)handleKey:(int)key withMask:(int)mask andMapping:(NSDictionary *)mapping |