надеюсь, это не ошибка, а просто мое недопонимание того, как 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