diff src/thumb_standard.c @ 876:2d8705f33da5

set fallback thumbnail pixbuf only if the loading really fails
author nadvornik
date Thu, 03 Jul 2008 19:38:19 +0000
parents f40509d56fe3
children 10d0bf784323
line wrap: on
line diff
--- 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;
 		}