[gnome-shell] st/icon: Add a default fallback icon



commit c89d6a633aa431adda8080665e38d957146c5357
Author: Florian Müllner <fmuellner gnome org>
Date:   Wed Mar 25 16:44:26 2020 +0100

    st/icon: Add a default fallback icon
    
    The idea behind commit 3dd8ffc2bb1cefd to try harder to avoid empty
    icon actors because of missing icons was sound, so implement that
    behavior in StIcon itself:
    
    If the main gicon was not found, and the fallback gicon isn't set or
    wasn't found either, fall back to the standard 'missing-image' icon.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1127

 src/st/st-icon.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)
---
diff --git a/src/st/st-icon.c b/src/st/st-icon.c
index 090ba4b10d..a2ccd8f754 100644
--- a/src/st/st-icon.c
+++ b/src/st/st-icon.c
@@ -59,6 +59,7 @@ struct _StIconPrivate
   gint             theme_icon_size; /* icon size from theme node */
   gint             icon_size;       /* icon size we are using */
   GIcon           *fallback_gicon;
+  GIcon           *default_gicon;
 
   CoglPipeline    *shadow_pipeline;
   StShadow        *shadow_spec;
@@ -72,6 +73,7 @@ static gboolean st_icon_update_icon_size (StIcon *icon);
 static void st_icon_update_shadow_pipeline (StIcon *icon);
 static void st_icon_clear_shadow_pipeline (StIcon *icon);
 
+#define IMAGE_MISSING_ICON_NAME "image-missing"
 #define DEFAULT_ICON_SIZE 48
 
 static void
@@ -166,6 +168,7 @@ st_icon_dispose (GObject *gobject)
 
   g_clear_object (&priv->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_spec, st_shadow_unref);
 
@@ -298,6 +301,8 @@ st_icon_init (StIcon *self)
                                            CLUTTER_BIN_ALIGNMENT_FILL);
   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->prop_icon_size = -1;
 
@@ -442,6 +447,14 @@ st_icon_update (StIcon *icon)
                                                          paint_scale,
                                                          resource_scale);
 
+  if (priv->pending_texture == NULL)
+    priv->pending_texture = st_texture_cache_load_gicon (cache,
+                                                         theme_node,
+                                                         priv->default_gicon,
+                                                         priv->icon_size,
+                                                         paint_scale,
+                                                         resource_scale);
+
   if (priv->pending_texture)
     {
       g_object_ref_sink (priv->pending_texture);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]