diff options
-rw-r--r-- | image.c | 18 | ||||
-rw-r--r-- | main.c | 12 | ||||
-rw-r--r-- | types.h | 1 |
3 files changed, 15 insertions, 16 deletions
@@ -60,7 +60,7 @@ void img_init(img_t *img, win_t *win) { } #ifdef HAVE_GIFLIB -/* originally based on, but in it's current form merely inspired by Imlib2's +/* Originally based on, but in its current form merely inspired by Imlib2's * src/modules/loaders/loader_gif.c:load(), written by Carsten Haitzler. */ int img_load_gif(img_t *img, const fileinfo_t *file) { @@ -97,7 +97,6 @@ int img_load_gif(img_t *img, const fileinfo_t *file) { do { if (DGifGetRecordType(gif, &rec) == GIF_ERROR) { - warn("could not open gif file: %s", file->name); err = 1; break; } @@ -122,7 +121,6 @@ int img_load_gif(img_t *img, const fileinfo_t *file) { } } else if (rec == IMAGE_DESC_RECORD_TYPE) { if (DGifGetImageDesc(gif) == GIF_ERROR) { - warn("could not open gif frame # %d: %s", img->multi.cnt, file->name); err = 1; break; } @@ -181,7 +179,6 @@ int img_load_gif(img_t *img, const fileinfo_t *file) { free(data); if (!im) { - warn("could not open gif frame # %d: %s", img->multi.cnt, file->name); err = 1; break; } @@ -207,16 +204,17 @@ int img_load_gif(img_t *img, const fileinfo_t *file) { DGifCloseFile(gif); - if (!err && img->multi.cnt > 1) { + if (err && !file->loaded) + warn("corrupted gif file: %s", file->name); + + if (img->multi.cnt > 1) { imlib_context_set_image(img->im); imlib_free_image(); img->im = img->multi.frames[0].im; img->multi.animate = GIF_AUTOPLAY; - } else { - for (i = 0; i < img->multi.cnt; i++) { - imlib_context_set_image(img->multi.frames[i].im); - imlib_free_image(); - } + } else if (img->multi.cnt == 1) { + imlib_context_set_image(img->multi.frames[0].im); + imlib_free_image(); img->multi.cnt = 0; img->multi.animate = 0; } @@ -99,6 +99,7 @@ void check_add_file(char *filename) { return; } } + files[fileidx].loaded = 0; files[fileidx].name = s_strdup(filename); if (*filename == '/') files[fileidx].path = files[fileidx].name; @@ -198,18 +199,17 @@ void load_image(int new) { new = filecnt - 1; } + files[new].loaded = 1; fileidx = new; if (!stat(files[new].path, &fstats)) filesize = fstats.st_size; else filesize = 0; - if (img.multi.cnt) { - if (img.multi.animate) - set_timeout(animate, img.multi.frames[img.multi.sel].delay, 1); - else - reset_timeout(animate); - } + if (img.multi.cnt && img.multi.animate) + set_timeout(animate, img.multi.frames[img.multi.sel].delay, 1); + else + reset_timeout(animate); } void update_title() { @@ -29,6 +29,7 @@ typedef enum { typedef struct { const char *name; /* as given by user */ const char *path; /* always absolute */ + unsigned char loaded; } fileinfo_t; /* timeouts in milliseconds: */ |