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