Флаги модификатора NSEvent - ошибка, когда удерживаются Shift и Caps-Lock? - PullRequest
4 голосов
/ 13 сентября 2011

У меня есть обратный вызов NSEvent Keyboard. Я смотрю на флаги модификатора события, чтобы определить, следует ли использовать заглавную букву.

Когда Caps-Lock включен и Shift удерживается, и вы нажимаете клавишу ... эта клавиша появляется как заглавная буква, но оба флага SHIFT и CAPS возвращают FALSE.

//For testing which flags are on.
//Holding down Shift and Caps for some reason = FALSE FALSE...
NSUInteger flags = [NSEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask;
if( flags == NSShiftKeyMask ){
    NSLog(@"Shift - TRUE");
} else {
    NSLog(@"Shift - FALSE");
}

if( flags == NSAlphaShiftKeyMask ){
    NSLog(@"CAPS - TRUE");
} else {
    NSLog(@"CAPS - FALSE");
}
return newUserKeypress;

Итак,

-Caps-Lock включен (индикатор включен)

-Сдвиг удерживается

-Нажмите клавишу [e]

-Выход "E"

-Но вывод вышеуказанного кода ЛОЖЬ ЛОЖЬ.

Использование либо сдвига, либо заглавных букв правильно отображает значения. Почему они оба не сообщают правильно? И если они оба выключены ... почему буква все еще пишется с большой буквы?

Если это по какой-то причине правильно ... как я могу отличить обычное нажатие клавиши, кроме нажатия клавиш со смещением и удерживанием колпачков? (они имеют одинаковые FALSE-FALSE флаги)

1 Ответ

11 голосов
/ 13 сентября 2011

Вы не хотите использовать ==, вам нужно использовать побитовые операторы:

if( flags & NSShiftKeyMask ){

...

if( flags & NSAlphaShiftKeyMask ){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...