Я просто экспериментировал с методом addLocalMonitorForEventsMatchingMask:handler:
в NSEvent и наткнулся на следующий вопрос: как узнать, были ли нажаты только определенные модификаторы?
A short example to set this question into context: я wanted to listen for the shortcut "⌘+W". Therefore я wrote the following code:
[NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *theEvent) {
if ([theEvent modifierFlags] & NSCommandKeyMask && [theEvent keyCode] == 13) {
[self.window performClose:self];
}
return theEvent;
}];
This works well, however the shortcut will be triggered, even if more modifier keys are pressed, e.g. "⌃+⌘+W" or "⇧+⌃+⌥+⌘+W". Is there a way to circumvent this?
Простым решением было бы проверить все другие ключи-модификаторы и гарантировать, что они не будут нажаты. Это кажется утомительным и склонным к ошибкам - к тому же он уродливым, как сейчас, с унарным "&". Кроме того, вы можете столкнуться с проблемами, если (по какой-то причине) к макетам клавиатуры добавлен еще один ключ-модификатор.
Как всегда, я благодарен за любые рекомендации.