From c0fddd0a14331c6358756bd726236de94852bb4e Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 13 Oct 2022 16:02:17 +0200 Subject: [PATCH] nitpicker: drop double press/release events Fixes #4639 --- repos/os/src/server/nitpicker/user_state.cc | 37 +++++++++++++-------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/repos/os/src/server/nitpicker/user_state.cc b/repos/os/src/server/nitpicker/user_state.cc index d26b5ba7b2..07a25c931a 100644 --- a/repos/os/src/server/nitpicker/user_state.cc +++ b/repos/os/src/server/nitpicker/user_state.cc @@ -112,23 +112,34 @@ void User_state::_handle_input_event(Input::Event ev) ev.handle_touch([&] (Input::Touch_id, float x, float y) { _pointer_pos = Point((int)x, (int)y); }); + /* track key states, drop double press/release events */ + { + bool drop = false; + + ev.handle_press([&] (Keycode key, Codepoint) { + if (_key_array.pressed(key)) { + warning("suspicious double press of ", Input::key_name(key)); + drop = true; + } + _key_array.pressed(key, true); + }); + + ev.handle_release([&] (Keycode key) { + if (!_key_array.pressed(key)) { + warning("suspicious double release of ", Input::key_name(key)); + drop = true; + } + _key_array.pressed(key, false); + }); + + if (drop) + return; + } + /* count keys */ if (ev.press()) _key_cnt++; if (ev.release() && (_key_cnt > 0)) _key_cnt--; - /* track key states */ - ev.handle_press([&] (Keycode key, Codepoint) { - if (_key_array.pressed(key)) - Genode::warning("suspicious double press of ", Input::key_name(key)); - _key_array.pressed(key, true); - }); - - ev.handle_release([&] (Keycode key) { - if (!_key_array.pressed(key)) - Genode::warning("suspicious double release of ", Input::key_name(key)); - _key_array.pressed(key, false); - }); - if (ev.absolute_motion() || ev.relative_motion() || ev.touch()) { update_hover();