35
35
#include "gimpviewrendererimagefile.h"
36
36
#include "gimpviewrenderer-frame.h"
38
#ifdef ENABLE_FILE_SYSTEM_ICONS
39
#define GTK_FILE_SYSTEM_ENABLE_UNSUPPORTED
40
#include <gtk/gtkfilesystem.h>
44
static void gimp_view_renderer_imagefile_render (GimpViewRenderer *renderer,
39
static void gimp_view_renderer_imagefile_render (GimpViewRenderer *renderer,
42
static GdkPixbuf * gimp_view_renderer_imagefile_get_icon (GimpImagefile *imagefile,
48
47
G_DEFINE_TYPE (GimpViewRendererImagefile, gimp_view_renderer_imagefile,
78
#ifdef ENABLE_FILE_SYSTEM_ICONS
80
GIMP_VIEW_RENDERER_IMAGEFILE (renderer)->file_system)
84
uri = gimp_object_get_name (GIMP_OBJECT (renderer->viewable));
87
GtkFileSystem *file_system;
90
file_system = GIMP_VIEW_RENDERER_IMAGEFILE (renderer)->file_system;
92
path = gtk_file_system_uri_to_path (file_system, uri);
94
pixbuf = gtk_file_system_render_icon (file_system, path, widget,
98
gtk_file_path_free (path);
76
GimpImagefile *imagefile = GIMP_IMAGEFILE (renderer->viewable);
78
pixbuf = gimp_view_renderer_imagefile_get_icon (imagefile,
101
#endif /* ENABLE_FILE_SYSTEM_ICONS */
112
93
gimp_view_renderer_default_render_stock (renderer, widget, stock_id);
98
/* The code to get an icon for a mime-type is lifted from GtkRecentManager. */
101
get_icon_for_mime_type (const char *mime_type,
104
GtkIconTheme *icon_theme;
105
const gchar *separator;
109
separator = strchr (mime_type, '/');
113
icon_theme = gtk_icon_theme_get_default ();
115
/* try with the three icon name variants for MIME types */
117
/* canonicalize MIME type: foo/x-bar -> foo-x-bar */
118
icon_name = g_string_new (NULL);
119
g_string_append_len (icon_name, mime_type, separator - mime_type);
120
g_string_append_c (icon_name, '-');
121
g_string_append (icon_name, separator + 1);
122
pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name->str,
126
g_string_free (icon_name, TRUE);
130
/* canonicalize MIME type, and prepend "gnome-mime-" */
131
icon_name = g_string_new ("gnome-mime-");
132
g_string_append_len (icon_name, mime_type, separator - mime_type);
133
g_string_append_c (icon_name, '-');
134
g_string_append (icon_name, separator + 1);
135
pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name->str,
139
g_string_free (icon_name, TRUE);
143
/* try the MIME family icon */
144
icon_name = g_string_new ("gnome-mime-");
145
g_string_append_len (icon_name, mime_type, separator - mime_type);
146
pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name->str,
150
g_string_free (icon_name, TRUE);
156
gimp_view_renderer_imagefile_get_icon (GimpImagefile *imagefile,
160
GdkScreen *screen = gtk_widget_get_screen (widget);
161
GtkIconTheme *icon_theme = gtk_icon_theme_get_for_screen (screen);
162
GdkPixbuf *pixbuf = NULL;
164
if (! gimp_object_get_name (GIMP_OBJECT (imagefile)))
167
#if GTK_CHECK_VERSION (2, 13, 4)
171
GFileInfo *file_info;
174
file = g_file_new_for_uri (gimp_object_get_name (GIMP_OBJECT (imagefile)));
175
file_info = g_file_query_info (file, "standard::icon", 0, NULL, NULL);
181
icon = g_file_info_get_icon (file_info);
183
info = gtk_icon_theme_lookup_by_gicon (icon_theme, icon, size, 0);
184
pixbuf = gtk_icon_info_load_icon (info, NULL);
186
g_object_unref (file_info);
189
g_object_unref (file);
193
if (! pixbuf && imagefile->thumbnail->image_mimetype)
195
pixbuf = get_icon_for_mime_type (imagefile->thumbnail->image_mimetype,
201
const gchar *icon_name = GTK_STOCK_FILE;
203
if (imagefile->thumbnail->image_state == GIMP_THUMB_STATE_FOLDER)
204
icon_name = GTK_STOCK_DIRECTORY;
206
pixbuf = gtk_icon_theme_load_icon (icon_theme,
208
GTK_ICON_LOOKUP_USE_BUILTIN,