Commit 0be75171 authored by Carlos Garnacho's avatar Carlos Garnacho Committed by Emmanuele Bassi

x11: Set the input device stage on XI_TouchBegin, if not already set

Until now, touch events sort of rely on XI_Enter/XI_Leave events accompanying
the pointer emulating touch in order to have a stage set on the device, These
events won't happen though if it's not a pointer emulating touch which happens
on the stage, causing touch events to be ignored.

Fix this by ensuring that the input device has a stage on XI_TouchBegin itself,
but only if it's not already set, so we don't possibly steal touch events to
an already interacting stage.
(cherry picked from commit 4c4e72a9)
Signed-off-by: 's avatarEmmanuele Bassi <>
parent b0e3a04b
......@@ -1155,6 +1155,14 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
#ifdef HAVE_XINPUT_2_2
case XI_TouchBegin:
XIDeviceEvent *xev = (XIDeviceEvent *) xi_event;
device = g_hash_table_lookup (manager_xi2->devices_by_id,
GINT_TO_POINTER (xev->deviceid));
if (!_clutter_input_device_get_stage (device))
_clutter_input_device_set_stage (device, stage);
/* Fall through */
case XI_TouchEnd:
XIDeviceEvent *xev = (XIDeviceEvent *) xi_event;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment