changeset 876:2d8705f33da5

set fallback thumbnail pixbuf only if the loading really fails
author nadvornik
date Thu, 03 Jul 2008 19:38:19 +0000
parents f103af877504
children 21e324dcd78c
files src/thumb.c src/thumb_standard.c
diffstat 2 files changed, 25 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/thumb.c	Thu Jul 03 18:16:39 2008 +0000
+++ b/src/thumb.c	Thu Jul 03 19:38:19 2008 +0000
@@ -112,6 +112,12 @@
 	if (tl->func_progress) tl->func_progress(tl, tl->data);
 }
 
+static void thumb_loader_set_fallback(ThumbLoader *tl)
+{
+	if (tl->fd->thumb_pixbuf) g_object_unref(tl->fd->thumb_pixbuf);
+	tl->fd->thumb_pixbuf = pixbuf_fallback(tl->fd, tl->max_w, tl->max_h);
+}
+
 static void thumb_loader_done_cb(ImageLoader *il, gpointer data)
 {
 	ThumbLoader *tl = data;
@@ -238,6 +244,8 @@
 	image_loader_free(tl->il);
 	tl->il = NULL;
 
+	thumb_loader_set_fallback(tl);
+	
 	if (tl->func_error) tl->func_error(tl, tl->data);
 }
 
@@ -332,8 +340,6 @@
 
 	if (!tl->fd) tl->fd = file_data_ref(fd);
 
-	if (tl->fd->thumb_pixbuf) g_object_unref(tl->fd->thumb_pixbuf);
-	tl->fd->thumb_pixbuf = pixbuf_fallback(tl->fd, tl->max_w, tl->max_h);
 
 	if (tl->cache_enable)
 		{
@@ -403,6 +409,7 @@
 
 		image_loader_free(tl->il);
 		tl->il = NULL;
+		thumb_loader_set_fallback(tl);
 		return FALSE;
 		}
 
--- a/src/thumb_standard.c	Thu Jul 03 18:16:39 2008 +0000
+++ b/src/thumb_standard.c	Thu Jul 03 19:38:19 2008 +0000
@@ -376,6 +376,12 @@
 	g_object_unref(G_OBJECT(pixbuf));
 }
 
+static void thumb_loader_std_set_fallback(ThumbLoaderStd *tl)
+{
+	if (tl->fd->thumb_pixbuf) g_object_unref(tl->fd->thumb_pixbuf);
+	tl->fd->thumb_pixbuf = pixbuf_fallback(tl->fd, tl->requested_width, tl->requested_height);
+}
+
 static GdkPixbuf *thumb_loader_std_finish(ThumbLoaderStd *tl, GdkPixbuf *pixbuf, gint shrunk)
 {
 	GdkPixbuf *pixbuf_thumb = NULL;
@@ -581,6 +587,8 @@
 
 	if (thumb_loader_std_next_source(tl, TRUE)) return;
 
+	thumb_loader_std_set_fallback(tl);
+	
 	if (tl->func_error) tl->func_error(tl, tl->data);
 }
 
@@ -648,10 +656,6 @@
 	if (!tl || !fd) return FALSE;
 
 	thumb_loader_std_reset(tl);
-	
-	if (fd->thumb_pixbuf) g_object_unref(fd->thumb_pixbuf);
-	fd->thumb_pixbuf = pixbuf_fallback(fd, tl->requested_width, tl->requested_height);
-
 
 	if (!stat_utf8(fd->path, &st)) return FALSE;
 
@@ -681,14 +685,19 @@
 		found = isfile(tl->thumb_path);
 		if (found && thumb_loader_std_setup(tl, tl->thumb_path)) return TRUE;
 
-		if (thumb_loader_std_fail_check(tl)) return FALSE;
-
-		return thumb_loader_std_next_source(tl, found);
+		if (thumb_loader_std_fail_check(tl) ||
+		    !thumb_loader_std_next_source(tl, found))
+			{
+			thumb_loader_std_set_fallback(tl);
+			return FALSE;
+			}
+		return TRUE;
 		}
 
 	if (!thumb_loader_std_setup(tl, tl->fd->path))
 		{
 		thumb_loader_std_save(tl, NULL);
+		thumb_loader_std_set_fallback(tl);
 		return FALSE;
 		}