[gnome-shell] StIcon: deprecate StIcon:icon-name and StIcon:icon-type



commit d3b0d23d8fc31667954d2ef19dc92bebf70fc287
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Sun Aug 26 15:36:45 2012 +0200

    StIcon: deprecate StIcon:icon-name and StIcon:icon-type
    
    Reroute setting those properties to a GIcon. API users are expected
    to create GIcon directly now.
    The advantage is that from a StIcon you can now create a similar one
    by accessing :gicon.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=682540

 src/st/st-icon.c          |   68 ++++++++++++++------------------------------
 src/st/st-private.c       |   52 ++++++++++++++++++++++++++++++++++
 src/st/st-private.h       |    2 +
 src/st/st-texture-cache.c |   49 +-------------------------------
 4 files changed, 78 insertions(+), 93 deletions(-)
---
diff --git a/src/st/st-icon.c b/src/st/st-icon.c
index ff75d32..ba04a5b 100644
--- a/src/st/st-icon.c
+++ b/src/st/st-icon.c
@@ -53,7 +53,6 @@ struct _StIconPrivate
   guint         opacity_handler_id;
 
   GIcon        *gicon;
-  gchar        *icon_name;
   StIconType    icon_type;
   gint          prop_icon_size;  /* icon size set as property */
   gint          theme_icon_size; /* icon size from theme node */
@@ -175,20 +174,6 @@ st_icon_dispose (GObject *gobject)
 }
 
 static void
-st_icon_finalize (GObject *gobject)
-{
-  StIconPrivate *priv = ST_ICON (gobject)->priv;
-
-  if (priv->icon_name)
-    {
-      g_free (priv->icon_name);
-      priv->icon_name = NULL;
-    }
-
-  G_OBJECT_CLASS (st_icon_parent_class)->finalize (gobject);
-}
-
-static void
 st_icon_get_preferred_height (ClutterActor *actor,
                               gfloat        for_width,
                               gfloat       *min_height_p,
@@ -337,7 +322,6 @@ st_icon_class_init (StIconClass *klass)
   object_class->get_property = st_icon_get_property;
   object_class->set_property = st_icon_set_property;
   object_class->dispose = st_icon_dispose;
-  object_class->finalize = st_icon_finalize;
 
   actor_class->get_preferred_height = st_icon_get_preferred_height;
   actor_class->get_preferred_width = st_icon_get_preferred_width;
@@ -348,7 +332,7 @@ st_icon_class_init (StIconClass *klass)
 
   pspec = g_param_spec_object ("gicon",
                                "GIcon",
-                               "A GIcon to override :icon-name",
+                               "The GIcon shown by this icon actor",
                                G_TYPE_ICON,
                                ST_PARAM_READWRITE);
   g_object_class_install_property (object_class, PROP_GICON, pspec);
@@ -356,7 +340,7 @@ st_icon_class_init (StIconClass *klass)
   pspec = g_param_spec_string ("icon-name",
                                "Icon name",
                                "An icon name",
-                               NULL, ST_PARAM_READWRITE);
+                               NULL, ST_PARAM_READWRITE | G_PARAM_DEPRECATED);
   g_object_class_install_property (object_class, PROP_ICON_NAME, pspec);
 
   pspec = g_param_spec_enum ("icon-type",
@@ -364,7 +348,7 @@ st_icon_class_init (StIconClass *klass)
                              "The type of icon that should be used",
                              ST_TYPE_ICON_TYPE,
                              DEFAULT_ICON_TYPE,
-                             ST_PARAM_READWRITE);
+                             ST_PARAM_READWRITE | G_PARAM_DEPRECATED);
   g_object_class_install_property (object_class, PROP_ICON_TYPE, pspec);
 
   pspec = g_param_spec_int ("icon-size",
@@ -492,14 +476,6 @@ st_icon_update (StIcon *icon)
                                                            priv->gicon,
                                                            priv->icon_size);
     }
-  else if (priv->icon_name)
-    {
-      priv->pending_texture = st_texture_cache_load_icon_name (cache,
-                                                               theme_node,
-                                                               priv->icon_name,
-                                                               priv->icon_type,
-                                                               priv->icon_size);
-    }
 
   if (priv->pending_texture)
     {
@@ -562,9 +538,16 @@ st_icon_new (void)
 const gchar *
 st_icon_get_icon_name (StIcon *icon)
 {
+  StIconPrivate *priv;
+
   g_return_val_if_fail (ST_IS_ICON (icon), NULL);
 
-  return icon->priv->icon_name;
+  priv = icon->priv;
+
+  if (priv->gicon && G_IS_THEMED_ICON (priv->gicon))
+    return g_themed_icon_get_names (G_THEMED_ICON (priv->gicon)) [0];
+  else
+    return NULL;
 }
 
 void
@@ -577,20 +560,20 @@ st_icon_set_icon_name (StIcon      *icon,
 
   priv = icon->priv;
 
-  /* Check if there's no change */
-  if (g_strcmp0 (priv->icon_name, icon_name) == 0)
-    return;
-
-  g_free (priv->icon_name);
-  priv->icon_name = g_strdup (icon_name);
-
   if (priv->gicon)
+    g_object_unref (priv->gicon);
+
+  if (icon_name)
     {
-      g_object_unref (priv->gicon);
-      priv->gicon = NULL;
-      g_object_notify (G_OBJECT (icon), "gicon");
+      if (priv->icon_type == ST_ICON_SYMBOLIC)
+        priv->gicon = _st_make_symbolic_themed_icon (icon_name);
+      else
+        priv->gicon = g_themed_icon_new_with_default_fallbacks (icon_name);
     }
+  else
+    priv->gicon = NULL;
 
+  g_object_notify (G_OBJECT (icon), "gicon");
   g_object_notify (G_OBJECT (icon), "icon-name");
 
   st_icon_update (icon);
@@ -665,7 +648,7 @@ void
 st_icon_set_gicon (StIcon *icon, GIcon *gicon)
 {
   g_return_if_fail (ST_IS_ICON (icon));
-  g_return_if_fail (G_IS_ICON (gicon));
+  g_return_if_fail (gicon == NULL || G_IS_ICON (gicon));
 
   if (icon->priv->gicon == gicon) /* do nothing */
     return;
@@ -679,13 +662,6 @@ st_icon_set_gicon (StIcon *icon, GIcon *gicon)
   if (gicon)
     icon->priv->gicon = g_object_ref (gicon);
 
-  if (icon->priv->icon_name)
-    {
-      g_free (icon->priv->icon_name);
-      icon->priv->icon_name = NULL;
-      g_object_notify (G_OBJECT (icon), "icon-name");
-    }
-
   g_object_notify (G_OBJECT (icon), "gicon");
 
   st_icon_update (icon);
diff --git a/src/st/st-private.c b/src/st/st-private.c
index bab1d3c..b34b3e4 100644
--- a/src/st/st-private.c
+++ b/src/st/st-private.c
@@ -691,3 +691,55 @@ _st_paint_shadow_with_opacity (StShadow        *shadow_spec,
                                       shadow_box.x2, shadow_box.y2,
                                       0, 0, 1, 1);
 }
+
+/* generates names like g_themed_icon_new_with_default_fallbacks(),
+ * but *only* symbolic names
+ */
+static char **
+symbolic_names_for_icon (const char *name)
+{
+  char **parts, **names;
+  int i, numnames;
+
+  parts = g_strsplit (name, "-", -1);
+  numnames = g_strv_length (parts);
+  names = g_new (char *, numnames + 1);
+  for (i = 0; parts[i]; i++)
+    {
+      if (i == 0)
+        {
+          names[i] = g_strdup_printf ("%s-symbolic", parts[i]);
+        }
+      else
+        {
+          names[i] = g_strdup_printf ("%.*s-%s-symbolic",
+                                      (int) (strlen (names[i - 1]) - strlen ("-symbolic")),
+                                      names[i - 1], parts[i]);
+        }
+    }
+  names[i] = NULL;
+
+  g_strfreev (parts);
+
+  /* need to reverse here, because longest (most specific)
+     name has to come first */
+  for (i = 0; i < (numnames / 2); i++) {
+    char *tmp = names[i];
+    names[i] = names[numnames - i - 1];
+    names[numnames - i - 1] = tmp;
+  }
+  return names;
+}
+
+GIcon *
+_st_make_symbolic_themed_icon (const char *icon_name)
+{
+  char **names;
+  GIcon *themed;
+
+  names = symbolic_names_for_icon (icon_name);
+  themed = g_themed_icon_new_from_names (names, -1);
+  g_strfreev (names);
+
+  return themed;
+}
diff --git a/src/st/st-private.h b/src/st/st-private.h
index c8ee495..87edff9 100644
--- a/src/st/st-private.h
+++ b/src/st/st-private.h
@@ -79,4 +79,6 @@ void _st_paint_shadow_with_opacity (StShadow        *shadow_spec,
                                     ClutterActorBox *box,
                                     guint8           paint_opacity);
 
+GIcon *_st_make_symbolic_themed_icon (const char    *icon_name);
+
 #endif /* __ST_PRIVATE_H__ */
diff --git a/src/st/st-texture-cache.c b/src/st/st-texture-cache.c
index 68dd337..67c7c52 100644
--- a/src/st/st-texture-cache.c
+++ b/src/st/st-texture-cache.c
@@ -22,6 +22,7 @@
 #include "config.h"
 
 #include "st-texture-cache.h"
+#include "st-private.h"
 #include <gtk/gtk.h>
 #include <string.h>
 #include <glib.h>
@@ -967,9 +968,6 @@ load_gicon_with_colors (StTextureCache    *cache,
  * icon isn't loaded already, the texture will be filled
  * asynchronously.
  *
- * This will load @icon as a full-color icon; if you want a symbolic
- * icon, you must use st_texture_cache_load_icon_name().
- *
  * Return Value: (transfer none): A new #ClutterActor for the icon, or %NULL if not found
  */
 ClutterActor *
@@ -1135,46 +1133,6 @@ st_texture_cache_load_sliced_image (StTextureCache    *cache,
  * full-color icon.
  */
 
-/* generates names like g_themed_icon_new_with_default_fallbacks(),
- * but *only* symbolic names
- */
-static char **
-symbolic_names_for_icon (const char *name)
-{
-  char **parts, **names;
-  int i, numnames;
-
-  parts = g_strsplit (name, "-", -1);
-  numnames = g_strv_length (parts);
-  names = g_new (char *, numnames + 1);
-  for (i = 0; parts[i]; i++)
-    {
-      if (i == 0)
-        {
-          names[i] = g_strdup_printf ("%s-symbolic", parts[i]);
-        }
-      else
-        {
-          names[i] = g_strdup_printf ("%.*s-%s-symbolic",
-                                      (int) (strlen (names[i - 1]) - strlen ("-symbolic")),
-                                      names[i - 1], parts[i]);
-        }
-    }
-  names[i] = NULL;
-
-  g_strfreev (parts);
-
-  /* need to reverse here, because longest (most specific)
-     name has to come first */
-  for (i = 0; i < (numnames / 2); i++) {
-    char *tmp = names[i];
-    names[i] = names[numnames - i - 1];
-    names[numnames - i - 1] = tmp;
-  }
-
-  return names;
-}
-
 /**
  * st_texture_cache_load_icon_name:
  * @cache: The texture cache instance
@@ -1198,16 +1156,13 @@ st_texture_cache_load_icon_name (StTextureCache    *cache,
 {
   ClutterActor *texture;
   GIcon *themed;
-  char **names;
 
   g_return_val_if_fail (!(icon_type == ST_ICON_SYMBOLIC && theme_node == NULL), NULL);
 
   switch (icon_type)
     {
     case ST_ICON_SYMBOLIC:
-      names = symbolic_names_for_icon (name);
-      themed = g_themed_icon_new_from_names (names, -1);
-      g_strfreev (names);
+      themed = _st_make_symbolic_themed_icon (name);
       texture = load_gicon_with_colors (cache, themed, size,
                                         st_theme_node_get_icon_colors (theme_node));
       g_object_unref (themed);



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