From 757d595fa372d7ba450d86857786cb1d7ecf16cd Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Wed, 25 Aug 2021 16:37:23 +0200 Subject: [PATCH] clutter/stage: Update stored pointer coordinates in fast paths If we are still under the "clear area" of the pick actor, we forget to update the coordinates. This is usually not needed, unless we need to repick again for non-event circumstances (e.g. pick actor is destroyed). This will ensure the right pointer coordinates are used afterwards in those situations. Part-of: --- clutter/clutter/clutter-stage.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c index 2c235ba6f..3f9394cc1 100644 --- a/clutter/clutter/clutter-stage.c +++ b/clutter/clutter/clutter-stage.c @@ -3440,6 +3440,24 @@ clutter_stage_get_device_coords (ClutterStage *stage, *coords = entry->coords; } +static void +clutter_stage_set_device_coords (ClutterStage *stage, + ClutterInputDevice *device, + ClutterEventSequence *sequence, + graphene_point_t coords) +{ + ClutterStagePrivate *priv = stage->priv; + PointerDeviceEntry *entry = NULL; + + if (sequence != NULL) + entry = g_hash_table_lookup (priv->touch_sequences, sequence); + else + entry = g_hash_table_lookup (priv->pointer_devices, device); + + if (entry) + entry->coords = coords; +} + static void create_crossing_event (ClutterStage *stage, ClutterInputDevice *device, @@ -3587,7 +3605,11 @@ clutter_stage_pick_and_update_device (ClutterStage *stage, { if (clutter_stage_check_in_clear_area (stage, device, sequence, point)) - return clutter_stage_get_device_actor (stage, device, sequence); + { + clutter_stage_set_device_coords (stage, device, + sequence, point); + return clutter_stage_get_device_actor (stage, device, sequence); + } } new_actor = _clutter_stage_do_pick (stage,