Особая проблема возникает в связи с глобальным мониторингом изменений флагов модификаторов.
Предположим, что монитор, как показано ниже ...
_flagsChangedGlobalEventHandler = [NSEvent addGlobalMonitorForEventsMatchingMask:NSFlagsChangedMask
handler:^(NSEvent *event) {
NSLog(@"Global flags changed event");
NSLog(@"[NSEvent modifierFlags] is %i and [event modifierFlags] is %i",
[NSEvent modifierFlags], [event modifierFlags]);
}
Первоначально, журнал обеспечивает следующее при нажатии левой команды:
[NSEvent modifierFlags] равен 1048576, а [event modifierFlags] равен 1048840
и после отпускания левой команды:
[NSEvent modifierFlags] равен 0, а [event modifierFlags] равен 256
Теперь, после того, как я переместил окно на своем MacBook, удерживая его тремя пальцами в области строки заголовка, на том же мониторе получаются следующие результаты:
[NSEvent modifierFlags] равен 1048576, а [event modifierFlags] равен 1048584
и после отпускания левой команды:
[NSEvent modifierFlags] равен 0, а [event modifierFlags] равен 0
Вопросы:
Почему [event modifierFlags] возвращает разные значения, в частности 256 для случая, когда модификатор не содержится?
Почему жест перемещения окна тремя пальцами вызывает изменение [event modifierFlags] на -256?
Я так понимаю, это может быть связано с блокировкой caps, хотя я не уверен, почему класс и ivar modifierFlags возвращают разные результаты.
Я на 10.7.3.