gtkicontheme: Don't query CONTENT_TYPE to determine svg
We already know based on the suffix of the filename. https://bugzilla.gnome.org/show_bug.cgi?id=721895
This commit is contained in:
parent
6f92c7942e
commit
62f8dae7a8
@ -261,6 +261,7 @@ struct _GtkIconInfo
|
|||||||
guint raw_coordinates : 1;
|
guint raw_coordinates : 1;
|
||||||
guint forced_size : 1;
|
guint forced_size : 1;
|
||||||
guint emblems_applied : 1;
|
guint emblems_applied : 1;
|
||||||
|
guint is_svg : 1;
|
||||||
|
|
||||||
/* Cached information if we go ahead and try to load
|
/* Cached information if we go ahead and try to load
|
||||||
* the icon.
|
* the icon.
|
||||||
@ -1760,6 +1761,7 @@ real_choose_icon (GtkIconTheme *icon_theme,
|
|||||||
out:
|
out:
|
||||||
if (icon_info)
|
if (icon_info)
|
||||||
{
|
{
|
||||||
|
icon_info->is_svg = (suffix_from_name (icon_info->filename) == ICON_SUFFIX_SVG);
|
||||||
icon_info->desired_size = size;
|
icon_info->desired_size = size;
|
||||||
icon_info->desired_scale = scale;
|
icon_info->desired_scale = scale;
|
||||||
icon_info->forced_size = (flags & GTK_ICON_LOOKUP_FORCE_SIZE) != 0;
|
icon_info->forced_size = (flags & GTK_ICON_LOOKUP_FORCE_SIZE) != 0;
|
||||||
@ -3844,10 +3846,9 @@ static gboolean
|
|||||||
icon_info_ensure_scale_and_pixbuf (GtkIconInfo *icon_info,
|
icon_info_ensure_scale_and_pixbuf (GtkIconInfo *icon_info,
|
||||||
gboolean scale_only)
|
gboolean scale_only)
|
||||||
{
|
{
|
||||||
int image_width, image_height;
|
gint image_width, image_height, image_size;
|
||||||
int scaled_desired_size;
|
gint scaled_desired_size;
|
||||||
GdkPixbuf *source_pixbuf;
|
GdkPixbuf *source_pixbuf;
|
||||||
gboolean is_svg;
|
|
||||||
|
|
||||||
/* First check if we already succeeded have the necessary
|
/* First check if we already succeeded have the necessary
|
||||||
* information (or failed earlier)
|
* information (or failed earlier)
|
||||||
@ -3872,29 +3873,6 @@ icon_info_ensure_scale_and_pixbuf (GtkIconInfo *icon_info,
|
|||||||
|
|
||||||
scaled_desired_size = icon_info->desired_size * icon_info->desired_scale;
|
scaled_desired_size = icon_info->desired_size * icon_info->desired_scale;
|
||||||
|
|
||||||
is_svg = FALSE;
|
|
||||||
if (G_IS_FILE_ICON (icon_info->loadable))
|
|
||||||
{
|
|
||||||
GFile *file;
|
|
||||||
GFileInfo *file_info;
|
|
||||||
const gchar *content_type;
|
|
||||||
|
|
||||||
file = g_file_icon_get_file (G_FILE_ICON (icon_info->loadable));
|
|
||||||
file_info = g_file_query_info (file,
|
|
||||||
G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
|
|
||||||
G_FILE_QUERY_INFO_NONE,
|
|
||||||
NULL, NULL);
|
|
||||||
if (file_info)
|
|
||||||
{
|
|
||||||
content_type = g_file_info_get_content_type (file_info);
|
|
||||||
|
|
||||||
if (content_type && strcmp (content_type, "image/svg+xml") == 0)
|
|
||||||
is_svg = TRUE;
|
|
||||||
|
|
||||||
g_object_unref (file_info);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* In many cases, the scale can be determined without actual access
|
/* In many cases, the scale can be determined without actual access
|
||||||
* to the icon file. This is generally true when we have a size
|
* to the icon file. This is generally true when we have a size
|
||||||
* for the directory where the icon is; the image size doesn't
|
* for the directory where the icon is; the image size doesn't
|
||||||
@ -3918,7 +3896,7 @@ icon_info_ensure_scale_and_pixbuf (GtkIconInfo *icon_info,
|
|||||||
icon_info->scale = (gdouble) scaled_desired_size / (icon_info->dir_size * icon_info->dir_scale);
|
icon_info->scale = (gdouble) scaled_desired_size / (icon_info->dir_size * icon_info->dir_scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (icon_info->scale >= 0. && scale_only && !is_svg)
|
if (icon_info->scale >= 0. && scale_only && !icon_info->is_svg)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* At this point, we need to actually get the icon; either from the
|
/* At this point, we need to actually get the icon; either from the
|
||||||
@ -3938,7 +3916,7 @@ icon_info_ensure_scale_and_pixbuf (GtkIconInfo *icon_info,
|
|||||||
&icon_info->load_error);
|
&icon_info->load_error);
|
||||||
if (stream)
|
if (stream)
|
||||||
{
|
{
|
||||||
if (is_svg)
|
if (icon_info->is_svg)
|
||||||
{
|
{
|
||||||
gint size = icon_info->dir_size * icon_info->dir_scale * icon_info->scale;
|
gint size = icon_info->dir_size * icon_info->dir_scale * icon_info->scale;
|
||||||
source_pixbuf = gdk_pixbuf_new_from_stream_at_scale (stream,
|
source_pixbuf = gdk_pixbuf_new_from_stream_at_scale (stream,
|
||||||
@ -3963,15 +3941,12 @@ icon_info_ensure_scale_and_pixbuf (GtkIconInfo *icon_info,
|
|||||||
*/
|
*/
|
||||||
image_width = gdk_pixbuf_get_width (source_pixbuf);
|
image_width = gdk_pixbuf_get_width (source_pixbuf);
|
||||||
image_height = gdk_pixbuf_get_height (source_pixbuf);
|
image_height = gdk_pixbuf_get_height (source_pixbuf);
|
||||||
|
image_size = MAX (image_width, image_height);
|
||||||
|
|
||||||
if (is_svg)
|
if (icon_info->is_svg)
|
||||||
{
|
icon_info->scale = image_size / 1000.;
|
||||||
gint image_size = MAX (image_width, image_height);
|
|
||||||
icon_info->scale = image_size / 1000.;
|
|
||||||
}
|
|
||||||
else if (icon_info->scale < 0.0)
|
else if (icon_info->scale < 0.0)
|
||||||
{
|
{
|
||||||
gint image_size = MAX (image_width, image_height);
|
|
||||||
if (image_size > 0)
|
if (image_size > 0)
|
||||||
icon_info->scale = (gdouble)scaled_desired_size / (gdouble)image_size;
|
icon_info->scale = (gdouble)scaled_desired_size / (gdouble)image_size;
|
||||||
else
|
else
|
||||||
@ -3989,7 +3964,7 @@ icon_info_ensure_scale_and_pixbuf (GtkIconInfo *icon_info,
|
|||||||
* extra complexity, we could keep the source pixbuf around
|
* extra complexity, we could keep the source pixbuf around
|
||||||
* but not actually scale it until needed.
|
* but not actually scale it until needed.
|
||||||
*/
|
*/
|
||||||
if (is_svg)
|
if (icon_info->is_svg)
|
||||||
icon_info->pixbuf = source_pixbuf;
|
icon_info->pixbuf = source_pixbuf;
|
||||||
else if (icon_info->scale == 1.0)
|
else if (icon_info->scale == 1.0)
|
||||||
icon_info->pixbuf = source_pixbuf;
|
icon_info->pixbuf = source_pixbuf;
|
||||||
|
Loading…
Reference in New Issue
Block a user