mirror of
https://github.com/brl/mutter.git
synced 2025-02-19 14:44:10 +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)
|
ClutterActor **out_actor)
|
||||||
{
|
{
|
||||||
ClutterActorPrivate *priv = self->priv;
|
ClutterActorPrivate *priv = self->priv;
|
||||||
|
GList *stage_views_list;
|
||||||
float max_refresh_rate = 0.0;
|
float max_refresh_rate = 0.0;
|
||||||
ClutterStageView *best_view = NULL;
|
ClutterStageView *best_view = NULL;
|
||||||
GList *l;
|
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)
|
if (priv->parent)
|
||||||
return clutter_actor_pick_frame_clock (priv->parent, out_actor);
|
return clutter_actor_pick_frame_clock (priv->parent, out_actor);
|
||||||
@ -15909,7 +15914,7 @@ clutter_actor_pick_frame_clock (ClutterActor *self,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (l = priv->stage_views; l; l = l->next)
|
for (l = stage_views_list; l; l = l->next)
|
||||||
{
|
{
|
||||||
ClutterStageView *view = l->data;
|
ClutterStageView *view = l->data;
|
||||||
float refresh_rate;
|
float refresh_rate;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user