wm: defer pointer report update

This patch ensures that the pointer report is updated not before all
input events are handled. The change does not solve any observed
practical issue but the potential problem was spotted while reviewing
the code.

Issue #4176
This commit is contained in:
Norman Feske 2021-10-12 15:53:51 +02:00
parent b2ff2a2950
commit 1088035f8e

View File

@ -112,10 +112,10 @@ struct Wm::Main : Pointer::Tracker
Report_forwarder _report_forwarder { env, heap };
Rom_forwarder _rom_forwarder { env, heap };
/**
* Pointer::Tracker interface
*/
void update_pointer_report() override
Genode::Signal_handler<Main> _update_pointer_report_handler =
{ env.ep(), *this, &Main::_handle_update_pointer_report };
void _handle_update_pointer_report()
{
Pointer::Position pos = gui_root.last_observed_pointer_pos();
@ -128,6 +128,21 @@ struct Wm::Main : Pointer::Tracker
});
}
/**
* Pointer::Tracker interface
*
* This method is called during the event handling, which may affect
* multiple 'Pointer::State' instances. Hence, at call time, not all
* pointer states may be up to date. To ensure the consistency of all
* pointer states when creating the report, we merely schedule a call
* of '_handle_update_pointer_report' that is executed after the event
* handling is finished.
*/
void update_pointer_report() override
{
_update_pointer_report_handler.local_submit();
}
Main(Genode::Env &env) : env(env)
{
pointer_reporter.enabled(true);