return icon->is_symbolic;
}
-static GLoadableIcon *
-icon_get_loadable (GtkIconPaintable *icon)
-{
- GFile *file;
- GLoadableIcon *loadable;
-
- if (icon->loadable)
- return g_object_ref (icon->loadable);
-
- if (icon->is_resource)
- {
- char *uri = g_strconcat ("resource://", icon->filename, NULL);
- file = g_file_new_for_uri (uri);
- g_free (uri);
- }
- else
- file = g_file_new_for_path (icon->filename);
-
- loadable = G_LOADABLE_ICON (g_file_icon_new (file));
-
- g_object_unref (file);
-
- return loadable;
-}
-
/* This function contains the complicated logic for deciding
* on the size at which to load the icon and loading it at
* that size.
else
icon->texture = gdk_texture_new_from_resource (icon->filename);
}
+ else if (icon->filename)
+ {
+ if (icon->is_svg)
+ {
+ GdkPixbuf *source_pixbuf;
+
+ if (gtk_icon_paintable_is_symbolic (icon))
+ source_pixbuf = gtk_make_symbolic_pixbuf_from_path (icon->filename,
+ pixel_size, pixel_size,
+ icon->desired_scale,
+ &load_error);
+ else
+ {
+ GFile *file = g_file_new_for_path (icon->filename);
+ GInputStream *stream = G_INPUT_STREAM (g_file_read (file, NULL, &load_error));
+
+ g_object_unref (file);
+ if (stream)
+ {
+ source_pixbuf = _gdk_pixbuf_new_from_stream_at_scale (stream,
+ "svg",
+ pixel_size, pixel_size,
+ TRUE, NULL,
+ &load_error);
+ g_object_unref (stream);
+ }
+ else
+ source_pixbuf = NULL;
+ }
+ if (source_pixbuf)
+ {
+ icon->texture = gdk_texture_new_for_pixbuf (source_pixbuf);
+ g_object_unref (source_pixbuf);
+ }
+ }
+ else
+ {
+ icon->texture = gdk_texture_new_from_filename (icon->filename, &load_error);
+ }
+ }
else
{
- GLoadableIcon *loadable;
GInputStream *stream;
GdkPixbuf *source_pixbuf;
- loadable = icon_get_loadable (icon);
- stream = g_loadable_icon_load (loadable,
+ g_assert (icon->loadable);
+
+ stream = g_loadable_icon_load (icon->loadable,
pixel_size,
NULL, NULL,
&load_error);
- g_object_unref (loadable);
-
if (stream)
{
/* SVG icons are a special case - we just immediately scale them
*/
if (icon->is_svg)
{
- if (gtk_icon_paintable_is_symbolic (icon))
- source_pixbuf = gtk_make_symbolic_pixbuf_from_path (icon->filename,
+ source_pixbuf = _gdk_pixbuf_new_from_stream_at_scale (stream,
+ "svg",
pixel_size, pixel_size,
- icon->desired_scale,
+ TRUE, NULL,
&load_error);
- else
- source_pixbuf = _gdk_pixbuf_new_from_stream_at_scale (stream,
- "svg",
- pixel_size, pixel_size,
- TRUE, NULL,
- &load_error);
}
else
source_pixbuf = _gdk_pixbuf_new_from_stream (stream,
g_object_unref (source_pixbuf);
}
}
-
}
if (!icon->texture)