Check modifierFlags de NSEvent se um determinado modificador foi pressionado, mas nenhum outro
Acabei de experimentar oaddLocalMonitorForEventsMatchingMask:handler:
no NSEvent e deparei-me com a seguinte pergunta: Como descobrir ses certos modificadores foram pressionados?
Um pequeno exemplo para definir essa pergunta no contexto: eu queria ouvir o atalho "⌘ + W". Portanto, eu escrevi o seguinte código:
[NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *theEvent) {
if ([theEvent modifierFlags] & NSCommandKeyMask && [theEvent keyCode] == 13) {
[self.window performClose:self];
}
return theEvent;
}];
Isso funciona bem, no entanto, o atalho será acionado, mesmo que mais teclas modificadoras sejam pressionadas, por exemplo "⌃ + ⌘ + W" ou "⇧ + ⌃ + ⌥ + ⌘ + W". Existe uma maneira de contornar isso?
Uma solução simples seria verificar todas as outras teclas modificadoras e garantir que elas não sejam pressionadas. Isso parece entediante e propenso a erros - além de ser bastante feio, como é agora com o "&" unário. Além disso, você pode ter problemas se (por algum motivo) outra tecla modificadora for adicionada aos layouts de teclad
Como sempre, sou grato por quaisquer recomendaçõe