[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