ignore double press / release events (#71)

This should fix most of the remaining issues with stuck keys in KDE
This commit is contained in:
Ferdinand Schober
2024-01-12 13:13:23 +01:00
committed by GitHub
parent 767fc8bd6b
commit d54b3a08e1

View File

@@ -720,6 +720,7 @@ impl Server {
} }
} }
State::Receiving => { State::Receiving => {
let mut ignore_event = false;
if let Event::Keyboard(KeyboardEvent::Key { if let Event::Keyboard(KeyboardEvent::Key {
time: _, time: _,
key, key,
@@ -735,15 +736,21 @@ impl Server {
return; return;
}; };
if state == 0 { if state == 0 {
client_state.pressed_keys.remove(&key); // ignore release event if key not pressed
ignore_event = !client_state.pressed_keys.remove(&key);
} else { } else {
client_state.pressed_keys.insert(key); // ignore press event if key not released
ignore_event = !client_state.pressed_keys.insert(key);
let _ = timer_tx.try_send(()); let _ = timer_tx.try_send(());
} }
} }
// consume event // ignore double press / release events to
consumer.consume(event, handle).await; // workaround buggy rdp backend.
log::trace!("{event:?} => consumer"); if !ignore_event {
// consume event
consumer.consume(event, handle).await;
log::trace!("{event:?} => consumer");
}
} }
State::AwaitingLeave => { State::AwaitingLeave => {
// we just entered the deadzone of a client, so // we just entered the deadzone of a client, so