diff options
| author | Stefan Berzl <stefanberzl@gmail.com> | 2017-08-21 18:39:07 +0300 |
|---|---|---|
| committer | Eric Koegel <eric.koegel@gmail.com> | 2017-08-21 18:39:07 +0300 |
| commit | 4387496fe332a50945e7db76bc2196b419656fe3 (patch) | |
| tree | 4bc79837c2a261d4408757aae5144e1b9a7a630a | |
| parent | 67b538b55b141e3b2c3399d1ac80b94bbe1f22e1 (diff) | |
| download | garcon-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.c | 33 |
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; } |