sculpt_manager: improve hover-seq coordination

When a single TOUCH and TOUCH_RELEASE event are submitted
simultaneously, the input sequence number is incremented twice. In
consequence, menu view will never generate a hover report for the
intermediate sequence number. However, this is the report that the
sculpt manager is waiting for to correlate it with the TOUCH event.

Only incrementing the input sequence number when the state changed from
not clicked to clicked exposes another corner case: When the last event
unfocused a dialog (e.g. the popup dialog) and when the current event
touches the dialog, the seq event is not delivered to the dialog because it
is not focused. Therefore, the seq event should be submitted after submitting
the TOUCH event.

genodelabs/genode#5491
This commit is contained in:
Johannes Schlatow 2025-03-19 22:10:11 +01:00 committed by Norman Feske
parent 9fdffcaa81
commit bdac10cb05

View File

@ -93,15 +93,19 @@ struct Gui::Session_component : Rpc_object<Gui::Session>,
if (click(ev)) _clicked = true;
if (clack(ev)) _clicked = false;
if (orig_clicked != _clicked) {
bool const new_seq = (!orig_clicked && _clicked);
if (new_seq)
_global_input_seq_number.value++;
_input_component.submit(_global_input_seq_number);
}
/* handle event locally within the sculpt manager */
_event_handler.handle_input_event(ev);
_input_component.submit(ev);
/* pass seq event after touch to pass it to the correct client */
if (new_seq)
_input_component.submit(_global_input_seq_number);
});
}