[Xfce4-commits] r25680 - libxfcegui4/trunk/libxfcegui4

Brian Tarricone kelnos at xfce.org
Sat May 5 21:01:20 CEST 2007


Author: kelnos
Date: 2007-05-05 19:01:20 +0000 (Sat, 05 May 2007)
New Revision: 25680

Modified:
   libxfcegui4/trunk/libxfcegui4/xfce-appmenuitem.c
Log:
lazy-load the menu icons in size-request rather than map so the size of the
menu item is calculated correctly to eliminate ugly menu overlap
(bug 3081)


Modified: libxfcegui4/trunk/libxfcegui4/xfce-appmenuitem.c
===================================================================
--- libxfcegui4/trunk/libxfcegui4/xfce-appmenuitem.c	2007-05-05 18:23:37 UTC (rev 25679)
+++ libxfcegui4/trunk/libxfcegui4/xfce-appmenuitem.c	2007-05-05 19:01:20 UTC (rev 25680)
@@ -67,8 +67,8 @@
                                             guint prop_id,
                                             GValue *value,
                                             GParamSpec *pspec);
-static gboolean xfce_app_menu_item_map(GtkWidget *widget,
-                                       GdkEventAny *event);
+static void xfce_app_menu_item_size_request(GtkWidget *widget,
+                                            GtkRequisition *req);
 static void xfce_app_menu_item_finalize(GObject *object);
 
 static void _command_activate_cb(GtkMenuItem *menu_item,
@@ -215,7 +215,7 @@
     
     g_type_class_add_private(klass, sizeof(XfceAppMenuItemPriv));
     
-    widget_class->map_event = xfce_app_menu_item_map;
+    widget_class->size_request = xfce_app_menu_item_size_request;
     
     gobject_class->finalize = xfce_app_menu_item_finalize;
     gobject_class->set_property = xfce_app_menu_item_set_property;
@@ -307,39 +307,41 @@
     }
 }
 
-static gboolean
-xfce_app_menu_item_map(GtkWidget *widget,
-                       GdkEventAny *event)
+static void
+xfce_app_menu_item_size_request(GtkWidget *widget,
+                                GtkRequisition *req)
 {
+
     XfceAppMenuItem *app_menu_item = XFCE_APP_MENU_ITEM(widget);
     GtkWidget *img;
     GdkPixbuf *pix;
     
-    if(!app_menu_item->priv->icon_path || app_menu_item->priv->icon_set)
-        return FALSE;
-    
-    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);
+    if(app_menu_item->priv->icon_path && !app_menu_item->priv->icon_set) {
+        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);
+        }
+        
+        pix = gdk_pixbuf_new_from_file_at_size(app_menu_item->priv->icon_path,
+                                               _xfce_app_menu_item_icon_size,
+                                               _xfce_app_menu_item_icon_size,
+                                               NULL);
+        
+        if(pix) {
+            gtk_image_set_from_pixbuf(GTK_IMAGE(img), pix);
+            g_object_unref(G_OBJECT(pix));
+            app_menu_item->priv->icon_set = TRUE;
+        } else {
+            g_free(app_menu_item->priv->icon_path);
+            app_menu_item->priv->icon_path = NULL;
+        }
     }
     
-    pix = gdk_pixbuf_new_from_file_at_size(app_menu_item->priv->icon_path,
-                                           _xfce_app_menu_item_icon_size,
-                                           _xfce_app_menu_item_icon_size,
-                                           NULL);
-    
-    if(pix) {
-        gtk_image_set_from_pixbuf(GTK_IMAGE(img), pix);
-        g_object_unref(G_OBJECT(pix));
-        app_menu_item->priv->icon_set = TRUE;
-    } else {
-        g_free(app_menu_item->priv->icon_path);
-        app_menu_item->priv->icon_path = NULL;
-    }
-    
-    return FALSE;
+    /* let the parent do its magic */
+    GTK_WIDGET_CLASS(xfce_app_menu_item_parent_class)->size_request(widget,
+                                                                    req);
 }
 
 static void



More information about the Xfce4-commits mailing list