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: */ | 
