aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNRK <nrk@disroot.org>2023-05-18 17:05:45 +0200
committerNRK <nrk@disroot.org>2023-05-18 17:05:45 +0200
commit4b67816eae77db28db64e5e80d0d99c60e74973f (patch)
tree3e1c92722d27eb7540452bb9ddd8d43394259169
parent5c6745436fcaca6e92b1a36a4add5aa15d17e164 (diff)
downloadnsxiv-4b67816eae77db28db64e5e80d0d99c60e74973f.tar.zst
fix: loading old frames due to multi-frame cache (#437)
by default imlib2 doesn't check the file's timestamp to avoid disk activity when loading from cache. however, this ends up breaking our autoreload functionality on multi-frame images. the reason why single frame images weren't broken was because `img_load()` calls `imlib_image_set_changes_on_disk()`, which tells imlib2 to check the timestamp before loading from cache. do the same thing for the multi-frame loader as well. additionally add a comment to img_load() explaining what's going on. Closes: https://codeberg.org/nsxiv/nsxiv/issues/436 Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/437 Reviewed-by: eylles <eylles@noreply.codeberg.org>
-rw-r--r--image.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/image.c b/image.c
index 42979c7..49dc72f 100644
--- a/image.c
+++ b/image.c
@@ -506,6 +506,7 @@ static bool img_load_multiframe(img_t *img, const fileinfo_t *file)
}
imlib_context_set_image(frame);
+ imlib_image_set_changes_on_disk(); /* see img_load() for rationale */
imlib_image_get_frame_info(&finfo);
assert(finfo.frame_count == (int)fcnt);
assert(finfo.canvas_w == img->w && finfo.canvas_h == img->h);
@@ -579,6 +580,9 @@ bool img_load(img_t *img, const fileinfo_t *file)
if ((img->im = img_open(file)) == NULL)
return false;
+ /* ensure that the image's timestamp is checked when loading from cache
+ * to avoid issues like: https://codeberg.org/nsxiv/nsxiv/issues/436
+ */
imlib_image_set_changes_on_disk();
/* since v1.7.5, Imlib2 can parse exif orientation from jpeg files.