Check modifierFlags of NSEvent si se presionó un cierto modificador pero no otro
Acabo de experimentar con eladdLocalMonitorForEventsMatchingMask:handler:
en NSEvent y encontré la siguiente pregunta: ¿Cómo puedo saber sisolament se presionaron ciertos modificadores?
Un breve ejemplo para poner esta pregunta en contexto: quería escuchar el atajo "⌘ + W". Por lo tanto, escribí el siguiente código:
[NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *theEvent) {
if ([theEvent modifierFlags] & NSCommandKeyMask && [theEvent keyCode] == 13) {
[self.window performClose:self];
}
return theEvent;
}];
Esto funciona bien, sin embargo, el acceso directo se activará, incluso si se presionan más teclas modificadoras, p. "⌃ + ⌘ + W" o "⇧ + ⌃ + ⌥ + ⌘ + W". ¿Hay alguna manera de evitar esto?
Una solución simple sería verificar todas las otras teclas modificadoras y asegurarse de que no se presionen. Esto parece tedioso y propenso a errores, además es lo suficientemente feo como lo es ahora con el unario "&". Además, puede tener problemas si (por alguna razón) se agrega otra tecla modificadora a los diseños del teclado.
Como siempre estoy agradecido por cualquier recomendación.