diff src/gui_gtk.c @ 7380:055a0b587a3e v7.4.995

commit https://github.com/vim/vim/commit/36e294c00c784b9ddd05a4fdbea2e331ab2b1ca8 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Dec 29 18:55:46 2015 +0100 patch 7.4.995 Problem: gdk_pixbuf_new_from_inline() is deprecated. Solution: Generate auto/gui_gtk_gresources.c. (Kazunobu Kazunobu, closes https://github.com/vim/vim/issues/507)
author Christian Brabandt <cb@256bit.org>
date Tue, 29 Dec 2015 19:00:05 +0100
parents 1ed945570d47
children 81794242a275
line wrap: on
line diff
--- a/src/gui_gtk.c
+++ b/src/gui_gtk.c
@@ -140,6 +140,31 @@ static const char * const menu_stock_ids
     /* 31 */ GTK_STOCK_QUIT
 };
 
+#ifdef USE_GRESOURCE
+typedef struct IconNames {
+    const char *icon_name;
+    const char *file_name;
+} IconNames;
+
+static IconNames stock_vim_icons[] = {
+    { "vim-build-tags", "stock_vim_build_tags.png" },
+    { "vim-find-help", "stock_vim_find_help.png" },
+    { "vim-save-all", "stock_vim_save_all.png" },
+    { "vim-session-load", "stock_vim_session_load.png" },
+    { "vim-session-new", "stock_vim_session_new.png" },
+    { "vim-session-save", "stock_vim_session_save.png" },
+    { "vim-shell", "stock_vim_shell.png" },
+    { "vim-window-maximize", "stock_vim_window_maximize.png" },
+    { "vim-window-maximize-width", "stock_vim_window_maximize_width.png" },
+    { "vim-window-minimize", "stock_vim_window_minimize.png" },
+    { "vim-window-minimize-width", "stock_vim_window_minimize_width.png" },
+    { "vim-window-split", "stock_vim_window_split.png" },
+    { "vim-window-split-vertical", "stock_vim_window_split_vertical.png" },
+    { NULL, NULL }
+};
+#endif
+
+#ifndef USE_GRESOURCE
     static void
 add_stock_icon(GtkIconFactory	*factory,
 	       const char	*stock_id,
@@ -157,6 +182,7 @@ add_stock_icon(GtkIconFactory	*factory,
     gtk_icon_set_unref(icon_set);
     g_object_unref(pixbuf);
 }
+#endif
 
     static int
 lookup_menu_iconfile(char_u *iconfile, char_u *dest)
@@ -262,11 +288,12 @@ toolbar_button_focus_in_event(GtkWidget 
     void
 gui_gtk_register_stock_icons(void)
 {
-#   include "../pixmaps/stock_icons.h"
+#ifndef USE_GRESOURCE
+# include "../pixmaps/stock_icons.h"
     GtkIconFactory *factory;
 
     factory = gtk_icon_factory_new();
-#   define ADD_ICON(Name, Data) add_stock_icon(factory, Name, Data, (int)sizeof(Data))
+# define ADD_ICON(Name, Data) add_stock_icon(factory, Name, Data, (int)sizeof(Data))
 
     ADD_ICON("vim-build-tags",		  stock_vim_build_tags);
     ADD_ICON("vim-find-help",		  stock_vim_find_help);
@@ -282,7 +309,28 @@ gui_gtk_register_stock_icons(void)
     ADD_ICON("vim-window-split",	  stock_vim_window_split);
     ADD_ICON("vim-window-split-vertical", stock_vim_window_split_vertical);
 
-#   undef ADD_ICON
+# undef ADD_ICON
+#else
+    GtkIconFactory * const factory = gtk_icon_factory_new();
+    const char * const path_prefix = "/org/vim/gui/icon";
+    IconNames *names;
+
+    for (names = stock_vim_icons; names->icon_name != NULL; names++)
+    {
+        char path[MAXPATHL];
+        GdkPixbuf *pixbuf;
+
+        vim_snprintf(path, MAXPATHL, "%s/%s", path_prefix, names->file_name);
+        pixbuf = gdk_pixbuf_new_from_resource(path, NULL);
+        if (pixbuf != NULL)
+        {
+            GtkIconSet *icon_set = gtk_icon_set_new_from_pixbuf(pixbuf);
+            gtk_icon_factory_add(factory, names->icon_name, icon_set);
+            gtk_icon_set_unref(icon_set);
+            g_object_unref(pixbuf);
+        }
+    }
+#endif
     gtk_icon_factory_add_default(factory);
     g_object_unref(factory);
 }