diff options
Diffstat (limited to 'pkgs/desktops/xfce4-13/garcon/13785.patch')
-rw-r--r-- | pkgs/desktops/xfce4-13/garcon/13785.patch | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/pkgs/desktops/xfce4-13/garcon/13785.patch b/pkgs/desktops/xfce4-13/garcon/13785.patch new file mode 100644 index 000000000000..1b723d21d60a --- /dev/null +++ b/pkgs/desktops/xfce4-13/garcon/13785.patch @@ -0,0 +1,75 @@ +From 4387496fe332a50945e7db76bc2196b419656fe3 Mon Sep 17 00:00:00 2001 +From: Stefan Berzl <stefanberzl@gmail.com> +Date: Mon, 21 Aug 2017 18:39:07 +0300 +Subject: [PATCH] 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> +--- + garcon-gtk/garcon-gtk-menu.c | 33 +++++++++++++++++++-------------- + 1 file 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; + } |