NSMenuItem KeyEquivalent " "(space) bug
cocoa, keyboard-shortcuts, nsmenuitem
Solution
I had the same problem. I haven't investigated very hard, but as far as I can tell, the spacebar doesn't "look" like a keyboard shortcut to Cocoa so it gets routed to `-insertText:`. My solution was to subclass the NSWindow, catch it as it goes up the responder chain (presumably you could subclass NSApp instead), and send it off to the menu system explicitly:
- (void)insertText:(id)insertString
{
if ([insertString isEqual:@" "]) {
NSEvent *fakeEvent = [NSEvent keyEventWithType:NSKeyDown
location:[self mouseLocationOutsideOfEventStream]
modifierFlags:0
timestamp:[[NSProcessInfo processInfo] systemUptime]
windowNumber:self.windowNumber
context:[NSGraphicsContext currentContext]
characters:@" "
charactersIgnoringModifiers:@" "
isARepeat:NO
keyCode:49];
[[NSApp mainMenu] performKeyEquivalent:fakeEvent];
} else {
[super insertText:insertString];
}
}
Problem
I want to set key equivalent " "(space) without any modifiers for NSMenuItem (in App Main Menu). As follows from documentation: For example, in an application that plays media, the Play command may be mapped to just “ ” (space), without the command key. You can do this with the following code: [menuItem setKeyEquivalent:@" "]; [menuItem setKeyEquivalentModifierMask:0]; Key Equivalent sets successfully, but it don't work. When I press "Space" key without modifiers nothing happens, but it's works when i press "Space" with "Fn" modifier key. I need to use "Space" without modifiers. Any help please!