[mutter] clutter/actor: Use different view list when picking frame clock of stage
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] clutter/actor: Use different view list when picking frame clock of stage
- Date: Fri, 11 Dec 2020 23:15:34 +0000 (UTC)
commit 9693462f3250336ca2a5dae316cfd358ca5b6fee
Author: Jonas Dreßler <verdre v0yd nl>
Date: Fri Dec 11 21:02:56 2020 +0100
clutter/actor: Use different view list when picking frame clock of stage
Apparently it can happen that a timeline tries to pick a frame clock
from an actor that's on a stage, but the actor still doesn't find a
frame clock and returns NULL.
This probably is the case when starting a timeline right after attaching
an actor to a newly created stage, so before the first stage-update
cycle. In this case clutter_actor_update_stage_views() will not have run
and the stage-actor will have priv->stage_views set to NULL even though
there are stage views.
To prevent this from happening, use the complete list of stage views
maintained by the backend when picking a frame clock for the stage.
This doesn't fix any issue appearing on master, but is correct
nonetheless.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1631>
clutter/clutter/clutter-actor.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
---
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
index 5deeae6d0d..9f9a594623 100644
--- a/clutter/clutter/clutter-actor.c
+++ b/clutter/clutter/clutter-actor.c
@@ -15897,11 +15897,16 @@ clutter_actor_pick_frame_clock (ClutterActor *self,
ClutterActor **out_actor)
{
ClutterActorPrivate *priv = self->priv;
+ GList *stage_views_list;
float max_refresh_rate = 0.0;
ClutterStageView *best_view = NULL;
GList *l;
- if (!priv->stage_views)
+ stage_views_list = CLUTTER_IS_STAGE (self)
+ ? clutter_stage_peek_stage_views (CLUTTER_STAGE (self))
+ : priv->stage_views;
+
+ if (!stage_views_list)
{
if (priv->parent)
return clutter_actor_pick_frame_clock (priv->parent, out_actor);
@@ -15909,7 +15914,7 @@ clutter_actor_pick_frame_clock (ClutterActor *self,
return NULL;
}
- for (l = priv->stage_views; l; l = l->next)
+ for (l = stage_views_list; l; l = l->next)
{
ClutterStageView *view = l->data;
float refresh_rate;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]