Xfce Wiki

Sub domains
 
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Berzl <stefanberzl@gmail.com>2017-08-21 18:39:07 +0300
committerEric Koegel <eric.koegel@gmail.com>2017-08-21 18:39:07 +0300
commit4387496fe332a50945e7db76bc2196b419656fe3 (patch)
tree4bc79837c2a261d4408757aae5144e1b9a7a630a
parent67b538b55b141e3b2c3399d1ac80b94bbe1f22e1 (diff)
downloadgarcon-4387496fe332a50945e7db76bc2196b419656fe3.tar.gz
fix: some menu icons are too big Bug #13785
Some packages only provide icons in sizes much bigger than the standard GTK menu size of 16px. The clipboard manager qlipper for example provides the following icon: /usr/share/icons/hicolor/128x128/apps/qlipper.png In GTK 3.22.18 the function gtk_image_new_from_icon_name when given GTK_ICON_SIZE_MENU as second argument still returns an image with 128x128. The patch I have supplied uses existing code to scale such an image. Signed-off-by: Eric Koegel <eric.koegel@gmail.com>
-rw-r--r--garcon-gtk/garcon-gtk-menu.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/garcon-gtk/garcon-gtk-menu.c b/garcon-gtk/garcon-gtk-menu.c
index 41990f2..f31a1ed 100644
--- a/garcon-gtk/garcon-gtk-menu.c
+++ b/garcon-gtk/garcon-gtk-menu.c
@@ -650,7 +650,11 @@ garcon_gtk_menu_load_icon (const gchar *icon_name)
gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &w, &h);
size = MIN (w, h);
- if (! gtk_icon_theme_has_icon (icon_theme, icon_name))
+ if (gtk_icon_theme_has_icon (icon_theme, icon_name))
+ {
+ pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name, size, 0, NULL);;
+ }
+ else
{
if (g_path_is_absolute (icon_name))
{
@@ -684,22 +688,23 @@ garcon_gtk_menu_load_icon (const gchar *icon_name)
g_free (name);
}
}
+ }
- /* Turn the pixbuf into a gtk_image */
- if (G_LIKELY (pixbuf))
- {
- /* scale the pixbuf down if it needs it */
- GdkPixbuf *tmp = gdk_pixbuf_scale_simple (pixbuf, w, h, GDK_INTERP_BILINEAR);
- g_object_unref (pixbuf);
- pixbuf = tmp;
+ /* Turn the pixbuf into a gtk_image */
+ if (G_LIKELY (pixbuf))
+ {
+ /* scale the pixbuf down if it needs it */
+ GdkPixbuf *pixbuf_scaled = gdk_pixbuf_scale_simple (pixbuf, w, h, GDK_INTERP_BILINEAR);
+ g_object_unref (G_OBJECT (pixbuf));
- image = gtk_image_new_from_pixbuf (pixbuf);
- g_object_unref (G_OBJECT (pixbuf));
- }
+ image = gtk_image_new_from_pixbuf (pixbuf_scaled);
+ g_object_unref (G_OBJECT (pixbuf_scaled));
+ }
+ else
+ {
+ /* display the placeholder at least */
+ image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU);
}
-
- if (image == NULL)
- image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU);
return image;
}