st/icon: Only get resource-scale after peeking theme node

If an actor is not on any stage view, then it doesn't have a valid
resource scale, which will hit an assert later.

When that is the case (for example when running headless), we expect
that there is no valid theme node (yet) either, so simply moving
the clutter_actor_get_resource_scale() call after peeking at the
theme node is enough to avoid the crash.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4522

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1935>
This commit is contained in:
Florian Müllner 2021-08-04 19:46:34 +02:00 committed by Marge Bot
parent 4bf5f7bdb1
commit 6e629c0f10

View File

@ -487,8 +487,6 @@ st_icon_update (StIcon *icon)
return; return;
} }
resource_scale = clutter_actor_get_resource_scale (CLUTTER_ACTOR (icon));
theme_node = st_widget_peek_theme_node (ST_WIDGET (icon)); theme_node = st_widget_peek_theme_node (ST_WIDGET (icon));
if (theme_node == NULL) if (theme_node == NULL)
return; return;
@ -496,6 +494,8 @@ st_icon_update (StIcon *icon)
if (priv->icon_size <= 0) if (priv->icon_size <= 0)
return; return;
resource_scale = clutter_actor_get_resource_scale (CLUTTER_ACTOR (icon));
stage = clutter_actor_get_stage (CLUTTER_ACTOR (icon)); stage = clutter_actor_get_stage (CLUTTER_ACTOR (icon));
context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage)); context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage));
g_object_get (context, "scale-factor", &paint_scale, NULL); g_object_get (context, "scale-factor", &paint_scale, NULL);