mirror of
https://github.com/brl/mutter.git
synced 2025-02-16 13:24:09 +00:00
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>
This commit is contained in:
parent
fbe1a16a6b
commit
9693462f32
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user