summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--osdep/macosx_application.m5
-rw-r--r--osdep/macosx_application_objc.h2
-rw-r--r--osdep/macosx_events.m16
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