Revision: 1593
          http://geeqie.svn.sourceforge.net/geeqie/?rev=1593&view=rev
Author:   nadvornik
Date:     2009-03-31 19:34:39 +0000 (Tue, 31 Mar 2009)

Log Message:
-----------
report pixbuf loader errors
https://sourceforge.net/tracker/?func=detail&aid=2720577&group_id=222125&atid=1054680

Modified Paths:
--------------
    trunk/src/image-load.c
    trunk/src/image-load.h

Modified: trunk/src/image-load.c
===================================================================
--- trunk/src/image-load.c      2009-03-31 18:45:33 UTC (rev 1592)
+++ trunk/src/image-load.c      2009-03-31 19:34:39 UTC (rev 1593)
@@ -155,6 +155,8 @@
 
        image_loader_stop(il);
 
+       if (il->error) DEBUG_1("%s", image_loader_get_error(il));
+
        DEBUG_1("freeing image loader %p bytes_read=%d", il, il->bytes_read);
 
        if (il->idle_done_id != -1) g_source_remove(il->idle_done_id);
@@ -179,6 +181,8 @@
                }
 
        if (il->pixbuf) g_object_unref(il->pixbuf);
+       
+       if (il->error) g_error_free(il->error);
 
        file_data_unref(il->fd);
 #ifdef HAVE_GTHREAD
@@ -460,7 +464,7 @@
        if (il->loader)
                {
                /* some loaders do not have a pixbuf till close, order is 
important here */
-               gdk_pixbuf_loader_close(il->loader, NULL);
+               gdk_pixbuf_loader_close(il->loader, il->error ? NULL : 
&il->error); /* we are interested in the first error only */
                image_loader_sync_pixbuf(il);
                g_object_unref(G_OBJECT(il->loader));
                il->loader = NULL;
@@ -519,7 +523,7 @@
                        return FALSE;
                        }
 
-               if (b < 0 || (b > 0 && !gdk_pixbuf_loader_write(il->loader, 
il->mapped_file + il->bytes_read, b, NULL)))
+               if (b < 0 || (b > 0 && !gdk_pixbuf_loader_write(il->loader, 
il->mapped_file + il->bytes_read, b, &il->error)))
                        {
                        image_loader_error(il);
                        return FALSE;
@@ -549,7 +553,7 @@
 
        image_loader_setup_loader(il);
 
-       if (!gdk_pixbuf_loader_write(il->loader, il->mapped_file + 
il->bytes_read, b, NULL))
+       if (!gdk_pixbuf_loader_write(il->loader, il->mapped_file + 
il->bytes_read, b, &il->error))
                {
                image_loader_stop_loader(il);
                return FALSE;
@@ -561,7 +565,7 @@
        while (il->loader && !gdk_pixbuf_loader_get_pixbuf(il->loader) && b > 0 
&& !image_loader_get_stopping(il))
                {
                b = MIN(il->read_buffer_size, il->bytes_total - il->bytes_read);
-               if (b < 0 || (b > 0 && !gdk_pixbuf_loader_write(il->loader, 
il->mapped_file + il->bytes_read, b, NULL)))
+               if (b < 0 || (b > 0 && !gdk_pixbuf_loader_write(il->loader, 
il->mapped_file + il->bytes_read, b, &il->error)))
                        {
                        image_loader_stop_loader(il);
                        return FALSE;
@@ -1013,7 +1017,17 @@
        return ret;
 }
 
+const gchar *image_loader_get_error(ImageLoader *il)
+{
+       const gchar *ret = NULL;
+       if (!il) return NULL;
+       g_mutex_lock(il->data_mutex);
+       if (il->error) ret = il->error->message;
+       g_mutex_unlock(il->data_mutex);
+       return ret;
+}
 
+
 /* FIXME - this can be rather slow and blocks until the size is known */
 gboolean image_load_dimensions(FileData *fd, gint *width, gint *height)
 {

Modified: trunk/src/image-load.h
===================================================================
--- trunk/src/image-load.h      2009-03-31 18:45:33 UTC (rev 1592)
+++ trunk/src/image-load.h      2009-03-31 19:34:39 UTC (rev 1593)
@@ -42,6 +42,7 @@
        gint idle_priority;
 
        GdkPixbufLoader *loader;
+       GError *error;
 
        gint idle_done_id;
        GList *area_param_list;
@@ -101,6 +102,7 @@
 gboolean image_loader_get_is_done(ImageLoader *il);
 FileData *image_loader_get_fd(ImageLoader *il);
 gboolean image_loader_get_shrunk(ImageLoader *il);
+const gchar *image_loader_get_error(ImageLoader *il);
 
 gboolean image_load_dimensions(FileData *fd, gint *width, gint *height);
 


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
_______________________________________________
Geeqie-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geeqie-svn

Reply via email to