changeset 1341:63eb48237608

load icons for external editors
author nadvornik
date Sat, 28 Feb 2009 18:51:25 +0000
parents 361120a66609
children 06ec1279e33e
files src/layout_util.c src/pixbuf_util.c src/pixbuf_util.h
diffstat 3 files changed, 32 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/layout_util.c	Sat Feb 28 18:01:16 2009 +0000
+++ b/src/layout_util.c	Sat Feb 28 18:51:25 2009 +0000
@@ -1651,6 +1651,11 @@
 		GList *path;
 		EditorDescription *editor = work->data;
 		GtkActionEntry entry = { editor->key, NULL, editor->name, editor->hotkey, NULL, G_CALLBACK(layout_menu_edit_cb) };
+		
+		if (register_theme_icon_as_stock(editor->key, editor->icon))
+			{
+			entry.stock_id = editor->key;
+			}
 		gtk_action_group_add_actions(lw->action_group_external, &entry, 1, lw);
 		
 		path = layout_actions_editor_menu_path(editor);
--- a/src/pixbuf_util.c	Sat Feb 28 18:01:16 2009 +0000
+++ b/src/pixbuf_util.c	Sat Feb 28 18:51:25 2009 +0000
@@ -131,7 +131,7 @@
 	return NULL;
 }
 
-static void pixbuf_inline_register_icon(const gchar *key)
+static void register_stock_icon(const gchar *key, GdkPixbuf *pixbuf)
 {
 	static GtkIconFactory *icon_factory = NULL;
 	GtkIconSet *icon_set;
@@ -142,7 +142,7 @@
 		gtk_icon_factory_add_default(icon_factory);
 		}
 	
-	icon_set = gtk_icon_set_new_from_pixbuf(pixbuf_inline(key));
+	icon_set = gtk_icon_set_new_from_pixbuf(pixbuf);
 	gtk_icon_factory_add(icon_factory, key, icon_set);
 }
 
@@ -154,11 +154,34 @@
 	i = 0;
 	while (inline_pixbuf_data[i].key)
 		{
-		pixbuf_inline_register_icon(inline_pixbuf_data[i].key);
+		register_stock_icon(inline_pixbuf_data[i].key, pixbuf_inline(inline_pixbuf_data[i].key));
 		i++;
 		}
 }
 
+gboolean register_theme_icon_as_stock(const gchar *key, const gchar *icon)
+{
+	GtkIconTheme *icon_theme;
+	GdkPixbuf *pixbuf;
+	GError *error = NULL;
+
+	icon_theme = gtk_icon_theme_get_default();
+	pixbuf = gtk_icon_theme_load_icon (icon_theme,
+                           icon, /* icon name */
+                           64, /* size */
+                           0,  /* flags */
+                           &error);
+	if (!pixbuf) 
+		{
+		DEBUG_1("Couldn't load icon: %s", error->message);
+		g_error_free(error);
+		return FALSE;
+		}
+	
+	register_stock_icon(key, pixbuf);
+	return TRUE;
+}
+
 gint pixbuf_scale_aspect(gint req_w, gint req_h, gint old_w, gint old_h,
 					  gint *new_w, gint *new_h)
 {
--- a/src/pixbuf_util.h	Sat Feb 28 18:01:16 2009 +0000
+++ b/src/pixbuf_util.h	Sat Feb 28 18:51:25 2009 +0000
@@ -19,6 +19,7 @@
 gboolean pixbuf_to_file_as_jpg(GdkPixbuf *pixbuf, const gchar *filename, gint quality);
 
 void pixbuf_inline_register_stock_icons(void);
+gboolean register_theme_icon_as_stock(const gchar *key, const gchar *icon);
 
 GdkPixbuf *pixbuf_inline(const gchar *key);
 GdkPixbuf *pixbuf_fallback(FileData *fd, gint requested_width, gint requested_height);