Skip to content

clutter: Update device on CLUTTER_TOUCHPAD_HOLD events

With commit be3bca01 in place, we now possibly skip early calls to clutter_stage_repick_device() happening early during initialization. These were also indirectly the ones that eventually ended up in the first call to clutter_stage_pick_and_update_device() actually initializing the PointerDeviceEntry.

With this no longer happening, we may end up with no PointerDeviceEntry implicitly set up after initialization, which may fail if the first event received from the seat pointer does not in fact trigger the clutter_stage_pick_and_update_device() call necessary to make things work from there on.

And this does indeed happen on touchpads, since the first input event obtained after CLUTTER_DEVICE_ADDED is CLUTTER_TOUCHPAD_HOLD instead of CLUTTER_MOTION. This finds an unset PointerDeviceEntry and crashes since the pointer device does still have no "presence" on the stage.

Fix this by making CLUTTER_TOUCHPAD_HOLD events also trigger a device update, so the fist event handled does always trigger the necessary device update.

Fixes: be3bca01 ("clutter: Check that pointer has coordinates prior to repick") Closes: #2978 (closed)

Edited by Carlos Garnacho

Merge request reports