mirror of
https://github.com/genodelabs/genode.git
synced 2025-04-13 22:23:45 +00:00
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:
parent
b2ff2a2950
commit
1088035f8e
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user