From 926567d5533a56ec4b609d814c0bbaf234901ba3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Thu, 17 Nov 2022 10:13:45 +0100 Subject: [PATCH 1/2] Revert "clutter/actor: Avoid some stage view updates" This reverts commit 7e7a639cc5132cf3355e861235f325540fe56548. --- clutter/clutter/clutter-actor.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c index 009488a069..4d1856ef77 100644 --- a/clutter/clutter/clutter-actor.c +++ b/clutter/clutter/clutter-actor.c @@ -1484,6 +1484,22 @@ clutter_actor_update_map_state (ClutterActor *self, #endif } +static void +queue_update_stage_views (ClutterActor *actor) +{ + while (actor && !actor->priv->needs_update_stage_views) + { + actor->priv->needs_update_stage_views = TRUE; + + /* We don't really need to update the stage-views of the actors up the + * hierarchy, we set the flag anyway though so we can avoid traversing + * the whole scenegraph when looking for actors which need an update + * in clutter_actor_finish_layout(). + */ + actor = actor->priv->parent; + } +} + static void queue_update_paint_volume (ClutterActor *actor); static void @@ -1528,6 +1544,18 @@ clutter_actor_real_map (ClutterActor *self) if (priv->unmapped_paint_branch_counter == 0) { + /* We skip unmapped actors when updating the stage-views list, so if + * an actors list got invalidated while it was unmapped make sure to + * set priv->needs_update_stage_views to TRUE for all actors up the + * hierarchy now. + */ + if (priv->needs_update_stage_views) + { + /* Avoid the early return in queue_update_stage_views() */ + priv->needs_update_stage_views = FALSE; + queue_update_stage_views (self); + } + /* Avoid the early return in clutter_actor_queue_relayout() */ priv->needs_width_request = FALSE; priv->needs_height_request = FALSE; @@ -2479,7 +2507,7 @@ clutter_actor_notify_if_geometry_changed (ClutterActor *self, static void absolute_geometry_changed (ClutterActor *actor) { - actor->priv->needs_update_stage_views = TRUE; + queue_update_stage_views (actor); } static ClutterActorTraverseVisitFlags -- 2.38.1 From c0f8a20fbd25d4efa1aae85505eb46ab987f9975 Mon Sep 17 00:00:00 2001 From: John Wudrick Date: Fri, 4 Nov 2022 02:35:12 +0000 Subject: [PATCH 2/2] window: Update ongoing edge resistance flags with input Fix a recent regression where edge resistance flags where no longer updated during the move/resize operation. Fixes: bd6b14a843 (window: Throttle window move grab updates) Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2492 Part-of: (cherry picked from commit d889aad7cf76f786208c446ce195d4e26f9c0a8d) --- src/core/window.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/core/window.c b/src/core/window.c index d376017166..3b35ee021e 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -6021,6 +6021,7 @@ queue_update_move (MetaWindow *window, MetaCompositor *compositor; MetaLaters *laters; + window->display->grab_last_edge_resistance_flags = flags; window->display->grab_latest_motion_x = x; window->display->grab_latest_motion_y = y; @@ -6166,6 +6167,7 @@ queue_update_resize (MetaWindow *window, MetaCompositor *compositor; MetaLaters *laters; + window->display->grab_last_edge_resistance_flags = flags; window->display->grab_latest_motion_x = x; window->display->grab_latest_motion_y = y; -- 2.38.1