load icons for external editors
authorVladimir Nadvornik <nadvornik@suse.cz>
Sat, 28 Feb 2009 18:51:25 +0000 (18:51 +0000)
committerVladimir Nadvornik <nadvornik@suse.cz>
Sat, 28 Feb 2009 18:51:25 +0000 (18:51 +0000)
src/layout_util.c
src/pixbuf_util.c
src/pixbuf_util.h

index 0d3af6e..5a6e07e 100644 (file)
@@ -1651,6 +1651,11 @@ static void layout_actions_setup_editors(LayoutWindow *lw)
                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);
index be83ad3..2f99d06 100644 (file)
@@ -131,7 +131,7 @@ GdkPixbuf *pixbuf_inline(const gchar *key)
        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 @@ static void pixbuf_inline_register_icon(const gchar *key)
                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 @@ void pixbuf_inline_register_stock_icons(void)
        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)
 {
index e65e27d..af6a918 100644 (file)
@@ -19,6 +19,7 @@ gboolean pixbuf_to_file_as_png (GdkPixbuf *pixbuf, const gchar *filename);
 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);