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. https://bugzilla.gnome.org/show_bug.cgi?id=732234
This commit is contained in:
parent
42f6828c9c
commit
4c4e72a9dc
@ -1155,6 +1155,14 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
|
|||||||
|
|
||||||
#ifdef HAVE_XINPUT_2_2
|
#ifdef HAVE_XINPUT_2_2
|
||||||
case XI_TouchBegin:
|
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:
|
case XI_TouchEnd:
|
||||||
{
|
{
|
||||||
XIDeviceEvent *xev = (XIDeviceEvent *) xi_event;
|
XIDeviceEvent *xev = (XIDeviceEvent *) xi_event;
|
||||||
|
Loading…
Reference in New Issue
Block a user