Commit 9693462f authored by verdre's avatar verdre Committed by Marge Bot
Browse files

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: <!1631>
parent fbe1a16a
Pipeline #238162 passed with stages
in 22 minutes and 17 seconds
......@@ -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;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment