From f357c4923abc73a8fa3b78469a139991bdcbc7dc Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Fri, 11 Apr 2025 19:22:02 +0200 Subject: [PATCH] sculpt: use nitpicker's clicked report for popup By using the clicked report instead of the hover report, we prevent the misinterpretation of a regular hover update as an overly delayed hover report matching a previous click (inside the popup). With this patch, the popup stays open when the pointer leaves the popup after the click. Issue #5496 Issue #5485 --- repos/gems/sculpt/leitzentrale/default | 6 +++--- repos/gems/src/app/sculpt_manager/main.cc | 24 +++++++++++------------ 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/repos/gems/sculpt/leitzentrale/default b/repos/gems/sculpt/leitzentrale/default index d8c05c47c8..8374571bd2 100644 --- a/repos/gems/sculpt/leitzentrale/default +++ b/repos/gems/sculpt/leitzentrale/default @@ -87,7 +87,7 @@ - + @@ -117,7 +117,7 @@ - + - + diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc index 7e64043701..87c1005a02 100644 --- a/repos/gems/src/app/sculpt_manager/main.cc +++ b/repos/gems/src/app/sculpt_manager/main.cc @@ -762,11 +762,11 @@ struct Sculpt::Main : Input_event_handler, Rom_handler
_nitpicker_hover_handler { _env, "nitpicker_hover", *this, &Main::_handle_nitpicker_hover }; - Rom_handler
_hover_handler { - _env, "hover", *this, &Main::_handle_hover }; + Rom_handler
_clicked_handler { + _env, "clicked", *this, &Main::_handle_click_report }; Rom_handler
_touch_handler { - _env, "touch", *this, &Main::_handle_touch }; + _env, "touch", *this, &Main::_handle_touch_report }; Expanding_reporter _gui_fb_config { _env, "config", "gui_fb_config" }; @@ -789,17 +789,17 @@ struct Sculpt::Main : Input_event_handler, return false; } - void _handle_touch(Xml_node const &touch) + void _handle_touch_report(Xml_node const &touch) { _popup_touched = _matches_popup_dialog(touch); _observed_touch_seq_number = { touch.attribute_value("seq_number", 0U) }; _try_handle_popup_close(); } - void _handle_hover(Xml_node const &hover) + void _handle_click_report(Xml_node const &click) { - _popup_hovered = _matches_popup_dialog(hover); - _observed_hover_seq_number = { hover.attribute_value("seq_number", 0U) }; + _popup_clicked = _matches_popup_dialog(click); + _observed_click_seq_number = { click.attribute_value("seq_number", 0U) }; _try_handle_popup_close(); } @@ -981,14 +981,14 @@ struct Sculpt::Main : Input_event_handler, /* used to correlate clicks with the matching hover report */ Input::Seq_number _emitted_click_seq_number { }; - Input::Seq_number _observed_touch_seq_number { }; + Input::Seq_number _observed_click_seq_number { }; /* used to correlate touch event with touched-session info from nitpicker */ Input::Seq_number _emitted_touch_seq_number { }; - Input::Seq_number _observed_hover_seq_number { }; + Input::Seq_number _observed_touch_seq_number { }; bool _popup_touched { }; - bool _popup_hovered { }; + bool _popup_clicked { }; /** * Input_event_handler interface @@ -1220,8 +1220,8 @@ struct Sculpt::Main : Input_event_handler, if (!_popup_touched) popup_close = true; - if (_emitted_click_seq_number.value == _observed_touch_seq_number.value) - if (!_popup_hovered) + if (_emitted_click_seq_number.value == _observed_click_seq_number.value) + if (!_popup_clicked) popup_close = true; if (popup_close) {