[Xfce4-commits] <thunar:master> Add support to render gicons in the shortcuts renderer.

Nick Schermer noreply at xfce.org
Sat Oct 13 16:12:04 CEST 2012


Updating branch refs/heads/master
         to c5d2afa13ff354c06dda474e305e8b940710e441 (commit)
       from f112e549d108171f4d264951b95ee06104bbb115 (commit)

commit c5d2afa13ff354c06dda474e305e8b940710e441
Author: Nick Schermer <nick at xfce.org>
Date:   Fri Oct 5 15:27:06 2012 +0200

    Add support to render gicons in the shortcuts renderer.

 thunar/thunar-shortcuts-icon-renderer.c |   42 ++++++++++++++++++++++++++++---
 1 files changed, 38 insertions(+), 4 deletions(-)

diff --git a/thunar/thunar-shortcuts-icon-renderer.c b/thunar/thunar-shortcuts-icon-renderer.c
index 13c110b..ff949c8 100644
--- a/thunar/thunar-shortcuts-icon-renderer.c
+++ b/thunar/thunar-shortcuts-icon-renderer.c
@@ -36,6 +36,7 @@ enum
 {
   PROP_0,
   PROP_VOLUME,
+  PROP_GICON,
 };
 
 
@@ -69,6 +70,7 @@ struct _ThunarShortcutsIconRenderer
   ThunarIconRenderer __parent__;
 
   GVolume           *volume;
+  GIcon             *gicon;
 };
 
 
@@ -102,6 +104,18 @@ thunar_shortcuts_icon_renderer_class_init (ThunarShortcutsIconRendererClass *kla
                                    g_param_spec_object ("volume", "volume", "volume",
                                                         G_TYPE_VOLUME,
                                                         EXO_PARAM_READWRITE));
+
+  /**
+   * ThunarIconRenderer:gicon:
+   *
+   * The GIcon to render, this property has preference over the the icon returned
+   * by the ThunarFile property.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_GICON,
+                                   g_param_spec_object ("gicon", "gicon", "gicon",
+                                                        G_TYPE_ICON,
+                                                        EXO_PARAM_READWRITE));
 }
 
 
@@ -125,6 +139,10 @@ thunar_shortcuts_icon_renderer_finalize (GObject *object)
   if (G_UNLIKELY (shortcuts_icon_renderer->volume != NULL))
     g_object_unref (shortcuts_icon_renderer->volume);
 
+  /* release the icon */
+  if (G_UNLIKELY (shortcuts_icon_renderer->gicon != NULL))
+    g_object_unref (shortcuts_icon_renderer->gicon);
+
   (*G_OBJECT_CLASS (thunar_shortcuts_icon_renderer_parent_class)->finalize) (object);
 }
 
@@ -144,6 +162,10 @@ thunar_shortcuts_icon_renderer_get_property (GObject    *object,
       g_value_set_object (value, shortcuts_icon_renderer->volume);
       break;
 
+    case PROP_GICON:
+      g_value_set_object (value, shortcuts_icon_renderer->gicon);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -168,6 +190,12 @@ thunar_shortcuts_icon_renderer_set_property (GObject      *object,
       shortcuts_icon_renderer->volume = g_value_dup_object (value);
       break;
 
+    case PROP_GICON:
+      if (G_UNLIKELY (shortcuts_icon_renderer->gicon != NULL))
+        g_object_unref (shortcuts_icon_renderer->gicon);
+      shortcuts_icon_renderer->gicon = g_value_dup_object (value);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -195,13 +223,18 @@ thunar_shortcuts_icon_renderer_render (GtkCellRenderer     *renderer,
   GIcon                       *gicon;
 
   /* check if we have a volume set */
-  if (G_UNLIKELY (shortcuts_icon_renderer->volume != NULL))
+  if (G_UNLIKELY (shortcuts_icon_renderer->volume != NULL
+      || shortcuts_icon_renderer->gicon != NULL))
     {
       /* load the volume icon */
       icon_theme = gtk_icon_theme_get_for_screen (gdk_drawable_get_screen (window));
 
-      /* look up the volume icon info */
-      gicon = g_volume_get_icon (shortcuts_icon_renderer->volume);
+      /* look up the icon info */
+      if (shortcuts_icon_renderer->gicon != NULL)
+        gicon = g_object_ref (shortcuts_icon_renderer->gicon);
+      else
+        gicon = g_volume_get_icon (shortcuts_icon_renderer->volume);
+
       icon_info = gtk_icon_theme_lookup_by_gicon (icon_theme, gicon, cell_area->width, 
                                                   GTK_ICON_LOOKUP_USE_BUILTIN);
       g_object_unref (gicon);
@@ -233,7 +266,8 @@ thunar_shortcuts_icon_renderer_render (GtkCellRenderer     *renderer,
               icon_area.height = gdk_pixbuf_get_height (icon);
             }
 
-          if (!thunar_g_volume_is_mounted (shortcuts_icon_renderer->volume))
+          if (shortcuts_icon_renderer->volume != NULL
+              && !thunar_g_volume_is_mounted (shortcuts_icon_renderer->volume))
             {
               /* 50% translucent for unmounted volumes */
               temp = exo_gdk_pixbuf_lucent (icon, 50);


More information about the Xfce4-commits mailing list