# HG changeset patch # User nadvornik # Date 1215113899 0 # Node ID 2d8705f33da574efb386f196fb7fda82bf3ea18f # Parent f103af877504f5c2cd43bb7030a7e068a9df8ceb set fallback thumbnail pixbuf only if the loading really fails diff -r f103af877504 -r 2d8705f33da5 src/thumb.c --- 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; } diff -r f103af877504 -r 2d8705f33da5 src/thumb_standard.c --- 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; }