Updating branch refs/heads/xfce-4.6 to 51bef833e35b29a3545f9f2fc969eabd0213c402 (commit) from 3d752d2143af8aeed8d1fe1ec64a7e7673dc2526 (commit)
commit 51bef833e35b29a3545f9f2fc969eabd0213c402 Author: Nick Schermer <n...@xfce.org> Date: Tue Jan 19 20:09:44 2010 +0100 Revert "redo how icon sizing works for the apps menu" This reverts commit e9aba8edc828113dfc4a4eef4cf14bc5a4932b7e. libxfcegui4/xfce-appmenuitem.c | 139 +++++++++++++++++++-------------------- 1 files changed, 68 insertions(+), 71 deletions(-) diff --git a/libxfcegui4/xfce-appmenuitem.c b/libxfcegui4/xfce-appmenuitem.c index 3362f7a..b72d30d 100644 --- a/libxfcegui4/xfce-appmenuitem.c +++ b/libxfcegui4/xfce-appmenuitem.c @@ -72,15 +72,15 @@ static void xfce_app_menu_item_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); +static void xfce_app_menu_item_size_request(GtkWidget *widget, + GtkRequisition *req); static void xfce_app_menu_item_finalize(GObject *object); -static void xfce_app_menu_item_realize(GtkWidget *widget); - -static void xfce_app_menu_item_update_icon(XfceAppMenuItem *app_menu_item); - static void _command_activate_cb(GtkMenuItem *menu_item, gpointer user_data); +static gint _xfce_app_menu_item_icon_size = -1; + G_DEFINE_TYPE(XfceAppMenuItem, xfce_app_menu_item, GTK_TYPE_IMAGE_MENU_ITEM) @@ -222,7 +222,7 @@ xfce_app_menu_item_class_init(XfceAppMenuItemClass *klass) g_type_class_add_private(klass, sizeof(XfceAppMenuItemPriv)); - widget_class->realize = xfce_app_menu_item_realize; + 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; @@ -257,6 +257,11 @@ xfce_app_menu_item_class_init(XfceAppMenuItemClass *klass) g_param_spec_boolean("use-underline", _("Use underline"), _("Whether or not to use an underscore in the label as a keyboard mnemonic"), FALSE, G_PARAM_READABLE | G_PARAM_WRITABLE)); + + if(-1 == _xfce_app_menu_item_icon_size) { + gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, + &_xfce_app_menu_item_icon_size, NULL); + } } static void @@ -356,6 +361,43 @@ xfce_app_menu_item_get_property(GObject *object, guint prop_id, GValue *value, } 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) { + 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; + } + } + + /* let the parent do its magic */ + GTK_WIDGET_CLASS(xfce_app_menu_item_parent_class)->size_request(widget, + req); +} + +static void xfce_app_menu_item_finalize(GObject *object) { XfceAppMenuItem *app_menu_item = XFCE_APP_MENU_ITEM(object); @@ -373,50 +415,34 @@ xfce_app_menu_item_finalize(GObject *object) } static void -xfce_app_menu_item_realize(GtkWidget *widget) -{ - XfceAppMenuItem *app_menu_item = XFCE_APP_MENU_ITEM(widget); - - GTK_WIDGET_CLASS(xfce_app_menu_item_parent_class)->realize(widget); - - xfce_app_menu_item_update_icon(app_menu_item); -} - -static void xfce_app_menu_item_update_icon(XfceAppMenuItem *app_menu_item) { - GtkWidget *img; - if(!GTK_WIDGET_REALIZED(app_menu_item)) return; - 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); - } else - gtk_image_clear(GTK_IMAGE(img)); - - if(app_menu_item->priv->icon_name) { + 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(gtk_icon_theme_has_icon(itheme, app_menu_item->priv->icon_name)) { - gtk_image_set_from_icon_name(GTK_IMAGE(img), app_menu_item->priv->icon_name, - GTK_ICON_SIZE_MENU); - } - } else if(app_menu_item->priv->icon_path) { - GdkPixbuf *pix; - gint w, h; + 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_icon_size_lookup(GTK_ICON_SIZE_MENU, &w, &h); - - pix = gdk_pixbuf_new_from_file_at_scale(app_menu_item->priv->icon_path, - w, h, TRUE, NULL); - if(pix) { 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); + } } } @@ -699,39 +725,10 @@ xfce_app_menu_item_set_icon_name(XfceAppMenuItem *app_menu_item, g_free(app_menu_item->priv->icon_path); app_menu_item->priv->icon_path = NULL; - if(filename) { - if(g_path_is_absolute(filename)) - app_menu_item->priv->icon_path = g_strdup(filename); - else { - gchar *p, *q; - gsize len; - - /* yes, there are really broken .desktop files out there - * messed up like this */ - - /* first make sure we aren't a weird relative path */ - p = g_strrstr(filename, G_DIR_SEPARATOR_S); - if(p) - p++; - else - p = (gchar *)filename; - - len = strlen(p); - - /* now make sure we don't have an extension */ - q = g_strrstr(p, "."); - if(q && (!strcmp(q, ".png") || !strcmp(q, ".svg") - || !strcmp(q, ".jpg") || !strcmp(q, ".gif") - || !strcmp(q, ".bmp"))) - { - len -= strlen(q); - } - - /* whatever's left... */ - if(p[0] && len) - app_menu_item->priv->icon_name = g_strndup(p, len); - } - } + 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); xfce_app_menu_item_update_icon(app_menu_item); } _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits