Глобальный мониторинг событий модификатора NSEvent возвращает смешанные результаты - PullRequest
3 голосов
/ 07 марта 2012

Особая проблема возникает в связи с глобальным мониторингом изменений флагов модификаторов.

Предположим, что монитор, как показано ниже ...

_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

Вопросы:

  1. Почему [event modifierFlags] возвращает разные значения, в частности 256 для случая, когда модификатор не содержится?

  2. Почему жест перемещения окна тремя пальцами вызывает изменение [event modifierFlags] на -256?

Я так понимаю, это может быть связано с блокировкой caps, хотя я не уверен, почему класс и ivar modifierFlags возвращают разные результаты.

Я на 10.7.3.

...