]> Pileus Git - ~andy/gtk/commitdiff
cssimage: Store the URI we're loaded from
authorBenjamin Otte <otte@redhat.com>
Wed, 2 Jan 2013 14:27:00 +0000 (15:27 +0100)
committerBenjamin Otte <otte@redhat.com>
Sat, 2 Feb 2013 00:42:48 +0000 (01:42 +0100)
I'd like to use it when printing the value, but I haven't found a way to
do that sanely yet, as I'd need to be able to print relative paths for
make check to work (otherwise the srcdir would blow things up). And we
use a GString to output to, so there's no way to attach a base dir to
that.

If anyone has an idea how to achieve that, poke me. Having the real
filename in debug prints sounds like a very good idea to me.

https://bugzilla.gnome.org/show_bug.cgi?id=692934

gtk/gtkcssimageurl.c
gtk/gtkcssimageurlprivate.h

index 92126d3859383e3d0640bfdec2ef902556ed00c8..2c6dc898e6ea1a6e7b9a8238cc19224c53e0bba3 100644 (file)
@@ -66,21 +66,20 @@ gtk_css_image_url_parse (GtkCssImage  *image,
 {
   GtkCssImageUrl *url = GTK_CSS_IMAGE_URL (image);
   GdkPixbuf *pixbuf;
-  GFile *file;
   cairo_t *cr;
   GError *error = NULL;
   GFileInputStream *input;
 
-  file = _gtk_css_parser_read_url (parser);
-  if (file == NULL)
+  url->file = _gtk_css_parser_read_url (parser);
+  if (url->file == NULL)
     return FALSE;
 
   /* We special case resources here so we can use
      gdk_pixbuf_new_from_resource, which in turn has some special casing
      for GdkPixdata files to avoid duplicating the memory for the pixbufs */
-  if (g_file_has_uri_scheme (file, "resource"))
+  if (g_file_has_uri_scheme (url->file, "resource"))
     {
-      char *uri = g_file_get_uri (file);
+      char *uri = g_file_get_uri (url->file);
       char *resource_path = g_uri_unescape_string (uri + strlen ("resource://"), NULL);
 
       pixbuf = gdk_pixbuf_new_from_resource (resource_path, &error);
@@ -89,7 +88,7 @@ gtk_css_image_url_parse (GtkCssImage  *image,
     }
   else
     {
-      input = g_file_read (file, NULL, &error);
+      input = g_file_read (url->file, NULL, &error);
       if (input == NULL)
        {
          _gtk_css_parser_take_error (parser, error);
@@ -99,7 +98,6 @@ gtk_css_image_url_parse (GtkCssImage  *image,
       pixbuf = gdk_pixbuf_new_from_stream (G_INPUT_STREAM (input), NULL, &error);
       g_object_unref (input);
     }
-  g_object_unref (file);
 
   if (pixbuf == NULL)
     {
@@ -158,6 +156,8 @@ gtk_css_image_url_dispose (GObject *object)
 {
   GtkCssImageUrl *url = GTK_CSS_IMAGE_URL (object);
 
+  g_clear_object (&url->file);
+
   if (url->surface)
     {
       cairo_surface_destroy (url->surface);
index c9e4f7dc6c4f3c9671f0b52935e7b7c14a961545..e2df7f1c7b19ef46147b0fa41316f9cf05825a27 100644 (file)
@@ -38,6 +38,7 @@ struct _GtkCssImageUrl
 {
   GtkCssImage parent;
 
+  GFile           *file;                /* the file we're loading from */
   cairo_surface_t *surface;             /* the surface we render - guaranteed to be an image surface */
 };