From 9f00572762d3bddb0752d46e3a2e76d22e5e63fc Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 10 Nov 2023 00:28:42 +0100 Subject: [PATCH] clutter: Defer repick on transform changes Avoid an immediate repick, and queue it instead so it happens for all devices on the next frame clock step. Part-of: --- clutter/clutter/clutter-actor.c | 18 ++++++------------ clutter/clutter/clutter-stage-private.h | 2 ++ clutter/clutter/clutter-stage.c | 6 +++--- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c index 45cbb320f..3c43c5ec7 100644 --- a/clutter/clutter/clutter-actor.c +++ b/clutter/clutter/clutter-actor.c @@ -960,7 +960,7 @@ static void push_in_paint_unmapped_branch (ClutterActor *self, static void pop_in_paint_unmapped_branch (ClutterActor *self, guint count); -static void clutter_actor_update_pointer (ClutterActor *self); +static void clutter_actor_update_devices (ClutterActor *self); static GQuark quark_actor_layout_info = 0; static GQuark quark_actor_transform_info = 0; @@ -2404,7 +2404,7 @@ update_pointer_if_not_animated (ClutterActor *actor) { if (!clutter_actor_has_transitions (actor) && !CLUTTER_ACTOR_IN_RELAYOUT (actor)) - clutter_actor_update_pointer (actor); + clutter_actor_update_devices (actor); } /*< private > @@ -12236,19 +12236,13 @@ clutter_actor_set_animatable_property (ClutterActor *actor, } static void -clutter_actor_update_pointer (ClutterActor *self) +clutter_actor_update_devices (ClutterActor *self) { - ClutterInputDevice *pointer; ClutterStage *stage; - ClutterSeat *seat; stage = CLUTTER_STAGE (_clutter_actor_get_stage_internal (self)); - if (!stage) - return; - - seat = clutter_backend_get_default_seat (clutter_get_default_backend ()); - pointer = clutter_seat_get_pointer (seat); - clutter_stage_repick_device (stage, pointer); + if (stage) + clutter_stage_invalidate_devices (stage); } static void @@ -12301,7 +12295,7 @@ clutter_actor_set_final_state (ClutterAnimatable *animatable, } } - clutter_actor_update_pointer (actor); + clutter_actor_update_devices (actor); g_free (p_name); } diff --git a/clutter/clutter/clutter-stage-private.h b/clutter/clutter/clutter-stage-private.h index 4aa75062b..d63b9e779 100644 --- a/clutter/clutter/clutter-stage-private.h +++ b/clutter/clutter/clutter-stage-private.h @@ -168,4 +168,6 @@ ClutterGrab * clutter_stage_grab_input_only (ClutterStage *self, gpointer user_data, GDestroyNotify user_data_destroy); +void clutter_stage_invalidate_devices (ClutterStage *stage); + G_END_DECLS diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c index 7f8c9bd1d..32bbf6501 100644 --- a/clutter/clutter/clutter-stage.c +++ b/clutter/clutter/clutter-stage.c @@ -840,8 +840,8 @@ clutter_stage_dequeue_actor_relayout (ClutterStage *stage, } } -static void -clutter_stage_invalidate_views_devices (ClutterStage *stage) +void +clutter_stage_invalidate_devices (ClutterStage *stage) { GList *l; @@ -900,7 +900,7 @@ clutter_stage_maybe_relayout (ClutterActor *actor) CLUTTER_NOTE (ACTOR, "<<< Completed recomputing layout of %d subtrees", count); if (count) - clutter_stage_invalidate_views_devices (stage); + clutter_stage_invalidate_devices (stage); } GSList *