From 802c3448793fdfd8255931235c40084558f7f515 Mon Sep 17 00:00:00 2001 From: Bert Date: Mon, 31 Jan 2011 15:51:26 +0100 Subject: Check file timestamps before loading from cache --- Makefile | 2 +- image.c | 25 ++++++++++++++++++++++--- image.h | 2 ++ main.c | 20 +++++++------------- 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 414cfe7..a7097c4 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ all: sxiv -VERSION=git-20110130 +VERSION=git-20110131 CC?=gcc PREFIX?=/usr/local diff --git a/image.c b/image.c index 83bd4b1..fd14ccc 100644 --- a/image.c +++ b/image.c @@ -52,22 +52,41 @@ void img_free(img_t* img) { imlib_free_image(); } +int img_check(const char *filename) { + Imlib_Image *im; + + if (!filename) + return 0; + + if (!(im = imlib_load_image(filename))) { + WARN("could not open image: %s", filename); + return 0; + } + + imlib_context_set_image(im); + imlib_image_set_changes_on_disk(); + imlib_free_image(); + + return 1; +} + int img_load(img_t *img, const char *filename) { Imlib_Image *im; if (!img || !filename) - return -1; + return 0; if (imlib_context_get_image()) imlib_free_image(); if (!(im = imlib_load_image(filename))) { WARN("could not open image: %s", filename); - return -1; + return 0; } imlib_context_set_image(im); imlib_context_set_anti_alias(img->aa); + imlib_image_set_changes_on_disk(); img->re = 0; img->checkpan = 0; @@ -76,7 +95,7 @@ int img_load(img_t *img, const char *filename) { img->w = imlib_image_get_width(); img->h = imlib_image_get_height(); - return 0; + return 1; } void img_check_pan(img_t *img, win_t *win) { diff --git a/image.h b/image.h index 450a739..0f8835d 100644 --- a/image.h +++ b/image.h @@ -49,7 +49,9 @@ typedef struct img_s { void img_init(img_t*, win_t*); void img_free(img_t*); +int img_check(const char*); int img_load(img_t*, const char*); + void img_render(img_t*, win_t*); int img_fit(img_t*, win_t*); diff --git a/main.c b/main.c index 1c103ac..4771cd9 100644 --- a/main.c +++ b/main.c @@ -102,7 +102,7 @@ int main(int argc, char **argv) { filecnt = 0; for (i = 0; i < options->filecnt; ++i) { - if (!(img_load(&img, options->filenames[i]) < 0)) + if (img_check(options->filenames[i])) filenames[filecnt++] = options->filenames[i]; } @@ -157,43 +157,37 @@ void on_keypress(XEvent *ev) { case XK_n: case XK_space: if (fileidx + 1 < filecnt) { - img_load(&img, filenames[++fileidx]); - changed = 1; + changed = img_load(&img, filenames[++fileidx]); } break; case XK_p: case XK_BackSpace: if (fileidx > 0) { - img_load(&img, filenames[--fileidx]); - changed = 1; + changed = img_load(&img, filenames[--fileidx]); } break; case XK_bracketleft: if (fileidx != 0) { fileidx = MAX(0, fileidx - 10); - img_load(&img, filenames[fileidx]); - changed = 1; + changed = img_load(&img, filenames[fileidx]); } break; case XK_bracketright: if (fileidx != filecnt - 1) { fileidx = MIN(fileidx + 10, filecnt - 1); - img_load(&img, filenames[fileidx]); - changed = 1; + changed = img_load(&img, filenames[fileidx]); } break; case XK_g: if (fileidx != 0) { fileidx = 0; - img_load(&img, filenames[fileidx]); - changed = 1; + changed = img_load(&img, filenames[fileidx]); } break; case XK_G: if (fileidx != filecnt - 1) { fileidx = filecnt - 1; - img_load(&img, filenames[fileidx]); - changed = 1; + changed = img_load(&img, filenames[fileidx]); } break; -- cgit v1.2.3-54-g00ecf