Xlib XEventQueue не всегда содержит все события - PullRequest
0 голосов
/ 26 сентября 2018

надеюсь, это не ошибка, а просто мое недопонимание того, как Xinput должен работать.

Я пишу игру и использую Xlib для ввода с клавиатуры.Странно то, что некоторые события KeyRelease, похоже, застряли в XServer на неопределенное время, пока не произойдет другое событие и не вытолкнут событие в очередь.

Я могу добиться этого, если нажму 3 кнопки одновременно (Левый, Стрелки вверх и вправо).По иронии судьбы, мне удалось добиться этого только с помощью клавиши со стрелкой влево.Но я воспроизвел его на разных машинах.

Я использовал XPending() для проверки очереди событий, а также XCheckMaskEvent(), и оба они, похоже, считают, что очередь пуста.Но, конечно же, когда я нажимаю другую клавишу, например right, событие KeyRelease для left происходит в одно и то же время.

Это ошибка?Или ожидаемая функциональность?

  • Примечание: может быть полезно знать, что я хватаю клавиатуру в корневом окне

Вот фактический код

loop do
  Fiber.yield
  next if (event = display.check_mask_event(KeyPressMask | KeyReleaseMask)).nil?
  case event
  when KeyEvent
    kcode = event.lookup_keysym event.state & ShiftMask ? 1 : 0
    return {event.type, kcode}
  else
    next
  end
end
...