Mercurial > geeqie
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; }