I am making a search field, which opens a NSMenu similar to Finder and Mail
The only problem, which drives me crazy, is that i cannot intercept the key events, once the menu is open
I even subclassed the NSApplication sendEvent, but was surprised to find out, that during menu, there is no call to Applications sendAction:
I subclassed performKeyEquivalent: NSMenu but it is not called
- (BOOL)performKeyEquivalent:(NSEvent *)theEvent
- (BOOL)menuHasKeyEquivalent:(NSMenu*)menu forEvent:(NSEvent*)event target:(id*)target action:(SEL*)action
How to intercept the keyboard input during NSMenu
It is possible with a usage of Carbon event handlers. These functions allow interception of keyboard events while menu is open: GetEventDispatcherTarget()
and InstallEventHandler()
. This is a hack, but in fact, it works reliably across all MacOSX versions starting from 10.7. Here's the source code that could be used as a reference implementation: https://github.com/mikekazakov/MGKMenuWithFilter
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With