[Xfce4-commits] <libxfcegui4:xfce-4.6> WIP: fix icon sizing for XfceAppMenuItem

Brian J. Tarricone brian at tarricone.org
Thu Aug 13 22:54:02 CEST 2009


Updating branch refs/heads/xfce-4.6
         to ca9cdfe40227adb1b690e57c81a22c99487195cb (commit)
       from c6c416386610b2819ee24d62b7f1c34a1a40e6eb (commit)

commit ca9cdfe40227adb1b690e57c81a22c99487195cb
Author: Brian J. Tarricone <brian at tarricone.org>
Date:   Thu Aug 13 13:51:50 2009 -0700

    WIP: fix icon sizing for XfceAppMenuItem

 libxfcegui4/xfce-appmenuitem.c |   61 +++++++++++++++++++++++++++++----------
 1 files changed, 45 insertions(+), 16 deletions(-)

diff --git a/libxfcegui4/xfce-appmenuitem.c b/libxfcegui4/xfce-appmenuitem.c
index ffef48f..b72d30d 100644
--- a/libxfcegui4/xfce-appmenuitem.c
+++ b/libxfcegui4/xfce-appmenuitem.c
@@ -414,6 +414,38 @@ xfce_app_menu_item_finalize(GObject *object)
     G_OBJECT_CLASS(xfce_app_menu_item_parent_class)->finalize(object);
 }
 
+static void
+xfce_app_menu_item_update_icon(XfceAppMenuItem *app_menu_item)
+{
+    if(!GTK_WIDGET_REALIZED(app_menu_item))
+        return;
+
+    if(app_menu_item->priv->icon_name)
+        gtk_image_set_from_icon_name(GTK_IMAGE(img), app_menu_item->priv->icon_name);
+    else if(app_menu_item->priv->icon_path) {
+        GtkIconTheme *itheme = gtk_icon_theme_get_default();
+        GdkPixbuf *pix = gtk_icon_theme_load_icon(itheme, app_menu_item->priv->icon_path, 0, NULL);
+        if(pix) {
+            GtkWidget *img = gtk_image_menu_item_get_image(GTK_IMAGE_MENU_ITEM(app_menu_item));
+
+            if(!img) {
+                img = gtk_image_new();
+                gtk_widget_show(img);
+                gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(app_menu_item), img);
+            }
+
+            gtk_image_set_from_pixbuf(GTK_IMAGE(img), pix);
+            g_object_unref(G_OBJECT(pix));
+        }
+    } else {
+        GtkWidget *img = gtk_image_menu_item_get_image(GTK_IMAGE_MENU_ITEM(app_menu_item));
+        if(img) {
+            gtk_image_set_from_icon_name(GTK_IMAGE(img), NULL);
+            gtk_image_set_from_pixbuf(GTK_IMAGE(img), NULL);
+        }
+    }
+}
+
 /**
  * xfce_app_menu_item_new:
  * @returns: A new #XfceAppMenuItem.
@@ -686,25 +718,19 @@ void
 xfce_app_menu_item_set_icon_name(XfceAppMenuItem *app_menu_item,
         const gchar *filename)
 {
-    GtkWidget *img;
-    
     g_return_if_fail(XFCE_IS_APP_MENU_ITEM(app_menu_item));
 
-    if(app_menu_item->priv->icon_name)
-        g_free(app_menu_item->priv->icon_name);
+    g_free(app_menu_item->priv->icon_name);
+    app_menu_item->priv->icon_name = NULL;
+    g_free(app_menu_item->priv->icon_path);
+    app_menu_item->priv->icon_path = NULL;
 
-    if(!filename) {
-        app_menu_item->priv->icon_name = NULL;
-        return;
-    }
+    if(!strstr(filename, G_DIR_SEPARATOR_S))
+        app_menu_item->priv->icon_name = g_strdup(filename);
+    else
+        app_menu_item->priv->icon_path = g_strdup(filename);
 
-    app_menu_item->priv->icon_name = g_strdup(filename);
-    app_menu_item->priv->icon_path = xfce_themed_icon_lookup(filename,
-                                                _xfce_app_menu_item_icon_size);
-    
-    img = gtk_image_menu_item_get_image(GTK_IMAGE_MENU_ITEM(app_menu_item));
-    if(img)
-        gtk_image_set_from_pixbuf(GTK_IMAGE(img), NULL);
+    xfce_app_menu_item_update_icon(app_menu_item);
 }
 
 /**
@@ -797,7 +823,10 @@ xfce_app_menu_item_get_icon_name(XfceAppMenuItem *app_menu_item)
 {
     g_return_val_if_fail(XFCE_IS_APP_MENU_ITEM(app_menu_item), NULL);
     
-    return app_menu_item->priv->icon_name;
+    if(app_menu_item->priv->icon_name)
+        return app_menu_item->priv->icon_name;
+    else
+        return app_menu_item->priv->icon_path;
 }
 
 /**



More information about the Xfce4-commits mailing list