st/icon: Use a static GIcon for the missing-image icon
Don't create a new GIcon for the "missing-image" texture but simply create it once statically instead and always use that. https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1179
This commit is contained in:
parent
402fd8ec29
commit
1ca39e8586
@ -59,7 +59,6 @@ struct _StIconPrivate
|
|||||||
gint theme_icon_size; /* icon size from theme node */
|
gint theme_icon_size; /* icon size from theme node */
|
||||||
gint icon_size; /* icon size we are using */
|
gint icon_size; /* icon size we are using */
|
||||||
GIcon *fallback_gicon;
|
GIcon *fallback_gicon;
|
||||||
GIcon *default_gicon;
|
|
||||||
|
|
||||||
CoglPipeline *shadow_pipeline;
|
CoglPipeline *shadow_pipeline;
|
||||||
StShadow *shadow_spec;
|
StShadow *shadow_spec;
|
||||||
@ -73,6 +72,8 @@ static gboolean st_icon_update_icon_size (StIcon *icon);
|
|||||||
static void st_icon_update_shadow_pipeline (StIcon *icon);
|
static void st_icon_update_shadow_pipeline (StIcon *icon);
|
||||||
static void st_icon_clear_shadow_pipeline (StIcon *icon);
|
static void st_icon_clear_shadow_pipeline (StIcon *icon);
|
||||||
|
|
||||||
|
static GIcon *default_gicon = NULL;
|
||||||
|
|
||||||
#define IMAGE_MISSING_ICON_NAME "image-missing"
|
#define IMAGE_MISSING_ICON_NAME "image-missing"
|
||||||
#define DEFAULT_ICON_SIZE 48
|
#define DEFAULT_ICON_SIZE 48
|
||||||
|
|
||||||
@ -168,7 +169,6 @@ st_icon_dispose (GObject *gobject)
|
|||||||
|
|
||||||
g_clear_object (&priv->gicon);
|
g_clear_object (&priv->gicon);
|
||||||
g_clear_object (&priv->fallback_gicon);
|
g_clear_object (&priv->fallback_gicon);
|
||||||
g_clear_object (&priv->default_gicon);
|
|
||||||
g_clear_pointer (&priv->shadow_pipeline, cogl_object_unref);
|
g_clear_pointer (&priv->shadow_pipeline, cogl_object_unref);
|
||||||
g_clear_pointer (&priv->shadow_spec, st_shadow_unref);
|
g_clear_pointer (&priv->shadow_spec, st_shadow_unref);
|
||||||
|
|
||||||
@ -295,14 +295,15 @@ st_icon_init (StIcon *self)
|
|||||||
{
|
{
|
||||||
ClutterLayoutManager *layout_manager;
|
ClutterLayoutManager *layout_manager;
|
||||||
|
|
||||||
|
if (G_UNLIKELY (default_gicon == NULL))
|
||||||
|
default_gicon = g_themed_icon_new (IMAGE_MISSING_ICON_NAME);
|
||||||
|
|
||||||
self->priv = st_icon_get_instance_private (self);
|
self->priv = st_icon_get_instance_private (self);
|
||||||
|
|
||||||
layout_manager = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_FILL,
|
layout_manager = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_FILL,
|
||||||
CLUTTER_BIN_ALIGNMENT_FILL);
|
CLUTTER_BIN_ALIGNMENT_FILL);
|
||||||
clutter_actor_set_layout_manager (CLUTTER_ACTOR (self), layout_manager);
|
clutter_actor_set_layout_manager (CLUTTER_ACTOR (self), layout_manager);
|
||||||
|
|
||||||
self->priv->default_gicon = g_themed_icon_new (IMAGE_MISSING_ICON_NAME);
|
|
||||||
|
|
||||||
self->priv->icon_size = DEFAULT_ICON_SIZE;
|
self->priv->icon_size = DEFAULT_ICON_SIZE;
|
||||||
self->priv->prop_icon_size = -1;
|
self->priv->prop_icon_size = -1;
|
||||||
|
|
||||||
@ -453,7 +454,7 @@ st_icon_update (StIcon *icon)
|
|||||||
if (priv->pending_texture == NULL)
|
if (priv->pending_texture == NULL)
|
||||||
priv->pending_texture = st_texture_cache_load_gicon (cache,
|
priv->pending_texture = st_texture_cache_load_gicon (cache,
|
||||||
theme_node,
|
theme_node,
|
||||||
priv->default_gicon,
|
default_gicon,
|
||||||
priv->icon_size,
|
priv->icon_size,
|
||||||
paint_scale,
|
paint_scale,
|
||||||
resource_scale);
|
resource_scale);
|
||||||
|
Loading…
Reference in New Issue
Block a user