From 3b8fe1b410de77409055439bcadc46badb55b3b8 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 7 Feb 2022 17:42:14 +0100 Subject: [PATCH] nitpicker: reflect seq number in clicked report This patch makes nitpicker's "clicked" report useful for the detection of clicks outside of any client. This is needed in situations where the dialog should close when clicking outside its screen area. In the new version, a click outside any client results in a report without a 'label' attribute. Furthermore, the report is augmented by the sequence number of the click, which allows for freshness checks by the consumer of the report (i.e., sculpt_manager). Issue #4398 --- repos/os/src/server/nitpicker/user_state.cc | 8 ++++++++ repos/os/src/server/nitpicker/user_state.h | 2 ++ 2 files changed, 10 insertions(+) diff --git a/repos/os/src/server/nitpicker/user_state.cc b/repos/os/src/server/nitpicker/user_state.cc index f1e4132f43..b1088afa11 100644 --- a/repos/os/src/server/nitpicker/user_state.cc +++ b/repos/os/src/server/nitpicker/user_state.cc @@ -89,6 +89,9 @@ static Input::Event merge_motion_events(Input::Event const *ev, unsigned n) void User_state::_handle_input_event(Input::Event ev) { + ev.handle_seq_number([&] (Input::Seq_number const &seq) { + _last_seq_number.construct(seq); }); + /* transparently convert relative into absolute motion event */ ev.handle_relative_motion([&] (int x, int y) { @@ -154,6 +157,8 @@ void User_state::_handle_input_event(Input::Event ev) if (_mouse_button(keycode)) _clicked_count++; + _last_clicked = nullptr; + /* update focused session */ if (_mouse_button(keycode) && _hovered @@ -414,6 +419,9 @@ void User_state::report_focused_view_owner(Xml_generator &xml, bool active) cons void User_state::report_last_clicked_view_owner(Xml_generator &xml) const { + if (_last_seq_number.constructed()) + xml.attribute("seq", _last_seq_number->value); + if (_last_clicked) _last_clicked->report(xml); diff --git a/repos/os/src/server/nitpicker/user_state.h b/repos/os/src/server/nitpicker/user_state.h index 4880f6cc26..83813081a8 100644 --- a/repos/os/src/server/nitpicker/user_state.h +++ b/repos/os/src/server/nitpicker/user_state.h @@ -106,6 +106,8 @@ class Nitpicker::User_state */ View_owner *_last_clicked = nullptr; + Constructible _last_seq_number { }; + /** * Number of clicks, used to detect whether a focus-relevant click * happened during '_handle_input_event'.