diff options
author | Matthias Clasen <mclasen@redhat.com> | 2016-01-29 22:47:38 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2016-01-30 00:29:04 -0500 |
commit | 0fe468c7898d8d531a1c901a5742b3612ee946d6 (patch) | |
tree | b72a2556cc33b429b1549107f129477f90bfb8c6 /gtk/gtkcssimagerecolor.c | |
parent | 2c7fdf6432057849bdf7ee9aaf71c328a39bd5a8 (diff) | |
download | gtk+-0fe468c7898d8d531a1c901a5742b3612ee946d6.tar.gz |
Emit an error if image loading fails
Instead of spamming stderr with g_warning, use the new
emit_error method of the GtkStyleProviderPrivate interface
to emit an error if loading an image fails.
Diffstat (limited to 'gtk/gtkcssimagerecolor.c')
-rw-r--r-- | gtk/gtkcssimagerecolor.c | 49 |
1 files changed, 34 insertions, 15 deletions
diff --git a/gtk/gtkcssimagerecolor.c b/gtk/gtkcssimagerecolor.c index c0aed94176..1c38654cfa 100644 --- a/gtk/gtkcssimagerecolor.c +++ b/gtk/gtkcssimagerecolor.c @@ -99,35 +99,46 @@ lookup_symbolic_colors (GtkCssStyle *style, } static GtkCssImage * -gtk_css_image_recolor_load (GtkCssImageRecolor *recolor, - GtkCssStyle *style, - GtkCssValue *palette, - gint scale) +gtk_css_image_recolor_load (GtkCssImageRecolor *recolor, + GtkCssStyle *style, + GtkCssValue *palette, + gint scale, + GError **gerror) { GtkCssImageUrl *url = GTK_CSS_IMAGE_URL (recolor); GtkIconInfo *info; GdkRGBA fg, success, warning, error; GdkPixbuf *pixbuf; GtkCssImage *image; - GError *gerror = NULL; + GError *local_error = NULL; lookup_symbolic_colors (style, palette, &fg, &success, &warning, &error); info = gtk_icon_info_new_for_file (url->file, 0, scale); - pixbuf = gtk_icon_info_load_symbolic (info, &fg, &success, &warning, &error, NULL, &gerror); + pixbuf = gtk_icon_info_load_symbolic (info, &fg, &success, &warning, &error, NULL, &local_error); g_object_unref (info); if (pixbuf == NULL) { - char *uri; + cairo_surface_t *empty; - /* XXX: Get the error somehow back to the CssProvider */ - uri = g_file_get_uri (url->file); - g_warning ("Error loading image '%s': %s\n", uri, gerror->message); - g_error_free (gerror); - g_free (uri); - - pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), "image-missing", 24, 0, NULL); + if (gerror) + { + char *uri; + + uri = g_file_get_uri (url->file); + g_set_error (gerror, + GTK_CSS_PROVIDER_ERROR, + GTK_CSS_PROVIDER_ERROR_FAILED, + "Error loading image '%s': %s", uri, local_error->message); + g_error_free (local_error); + g_free (uri); + } + + empty = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 0, 0); + image = _gtk_css_image_surface_new (empty); + cairo_surface_destroy (empty); + return image; } image = _gtk_css_image_surface_new_for_pixbuf (pixbuf); @@ -147,6 +158,7 @@ gtk_css_image_recolor_compute (GtkCssImage *image, GtkCssValue *palette; GtkCssImage *img; int scale; + GError *error = NULL; scale = _gtk_style_provider_private_get_scale (provider); @@ -155,7 +167,14 @@ gtk_css_image_recolor_compute (GtkCssImage *image, else palette = _gtk_css_value_ref (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_PALETTE)); - img = gtk_css_image_recolor_load (recolor, style, palette, scale); + img = gtk_css_image_recolor_load (recolor, style, palette, scale, &error); + + if (error) + { + GtkCssSection *section = gtk_css_style_get_section (style, property_id); + _gtk_style_provider_private_emit_error (provider, section, error); + g_error_free (error); + } _gtk_css_value_unref (palette); |