mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-20 17:52:52 +00:00
nitpicker: defer hover changed while dragging
When holding at least one key or button, the hovering should never change. In the previous version, this invariant was not enforced, but the symptoms for eventual inconsistencies were masked by two checkes: one when generating the hover report, and one when submitting the leave event. This patch enforces the invariant by suppressing any change of 'User_state::_hovered' while in dragged state. Fixes #3973
This commit is contained in:
parent
7266f29491
commit
72801975cd
@ -705,7 +705,7 @@ void Nitpicker::Main::handle_input_events(User_state::Input_batch batch)
|
||||
}
|
||||
|
||||
/* report hover changes */
|
||||
if (_hover_reporter.enabled() && !result.key_pressed
|
||||
if (_hover_reporter.enabled()
|
||||
&& (result.hover_changed || (old_motion_activity != _motion_activity))) {
|
||||
Reporter::Xml_generator xml(_hover_reporter, [&] () {
|
||||
_user_state.report_hovered_view_owner(xml, _motion_activity); });
|
||||
|
@ -419,6 +419,10 @@ User_state::Handle_forget_result User_state::forget(View_owner const &owner)
|
||||
|
||||
User_state::Update_hover_result User_state::update_hover()
|
||||
{
|
||||
/* no hover changes while dragging */
|
||||
if (_key_pressed())
|
||||
return { .hover_changed = false };
|
||||
|
||||
View_owner * const old_hovered = _hovered;
|
||||
View const * const pointed_view = _view_stack.find_view(_pointer_pos);
|
||||
|
||||
@ -432,7 +436,7 @@ User_state::Update_hover_result User_state::update_hover()
|
||||
if (old_hovered)
|
||||
old_hovered->submit_input_event(Hover_leave());
|
||||
|
||||
if (_hovered && _key_cnt == 0)
|
||||
if (_hovered)
|
||||
_hovered->submit_input_event(Absolute_motion{_pointer_pos.x(),
|
||||
_pointer_pos.y()});
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user