From 4b67816eae77db28db64e5e80d0d99c60e74973f Mon Sep 17 00:00:00 2001 From: NRK Date: Thu, 18 May 2023 15:05:45 +0000 Subject: [PATCH] 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 --- image.c | 4 ++++ 1 file changed, 4 insertions(+) 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.