diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/imlib.c | 76 | ||||
| -rw-r--r-- | src/slideshow.c | 76 | 
2 files changed, 76 insertions, 76 deletions
| diff --git a/src/imlib.c b/src/imlib.c index 6d48394..e050126 100644 --- a/src/imlib.c +++ b/src/imlib.c @@ -322,6 +322,82 @@ int feh_load_image(Imlib_Image * im, feh_file * file)  	return(1);  } +void feh_reload_image(winwidget w, int resize, int force_new) +{ +	char *new_title; +	int len; +	Imlib_Image tmp; +	int old_w, old_h; + +	if (!w->file) { +		im_weprintf(w, "couldn't reload, this image has no file associated with it."); +		winwidget_render_image(w, 0, 0); +		return; +	} + +	D(("resize %d, force_new %d\n", resize, force_new)); + +	free(FEH_FILE(w->file->data)->caption); +	FEH_FILE(w->file->data)->caption = NULL; + +	len = strlen(w->name) + sizeof("Reloading: ") + 1; +	new_title = emalloc(len); +	snprintf(new_title, len, "Reloading: %s", w->name); +	winwidget_rename(w, new_title); +	free(new_title); + +	old_w = gib_imlib_image_get_width(w->im); +	old_h = gib_imlib_image_get_height(w->im); + +	/* +	 * If we don't free the old image before loading the new one, Imlib2's +	 * caching will get in our way. +	 * However, if --reload is used (force_new == 0), we want to continue if +	 * the new image cannot be loaded, so we must not free the old image yet. +	 */ +	if (force_new) +		winwidget_free_image(w); + +	if ((feh_load_image(&tmp, FEH_FILE(w->file->data))) == 0) { +		if (force_new) +			eprintf("failed to reload image\n"); +		else { +			im_weprintf(w, "Couldn't reload image. Is it still there?"); +			winwidget_render_image(w, 0, 0); +		} +		return; +	} + +	if (!resize && ((old_w != gib_imlib_image_get_width(tmp)) || +			(old_h != gib_imlib_image_get_height(tmp)))) +		resize = 1; + +	if (!force_new) +		winwidget_free_image(w); + +	w->im = tmp; +	winwidget_reset_image(w); + +	w->mode = MODE_NORMAL; +	if ((w->im_w != gib_imlib_image_get_width(w->im)) +	    || (w->im_h != gib_imlib_image_get_height(w->im))) +		w->had_resize = 1; +	if (w->has_rotated) { +		Imlib_Image temp; + +		temp = gib_imlib_create_rotated_image(w->im, 0.0); +		w->im_w = gib_imlib_image_get_width(temp); +		w->im_h = gib_imlib_image_get_height(temp); +		gib_imlib_free_image_and_decache(temp); +	} else { +		w->im_w = gib_imlib_image_get_width(w->im); +		w->im_h = gib_imlib_image_get_height(w->im); +	} +	winwidget_render_image(w, resize, 0); + +	return; +} +  static int feh_file_is_raw(char *filename)  {  	childpid = fork(); diff --git a/src/slideshow.c b/src/slideshow.c index ac8c545..f807d41 100644 --- a/src/slideshow.c +++ b/src/slideshow.c @@ -182,82 +182,6 @@ void cb_reload_timer(void *data)  	return;  } -void feh_reload_image(winwidget w, int resize, int force_new) -{ -	char *new_title; -	int len; -	Imlib_Image tmp; -	int old_w, old_h; - -	if (!w->file) { -		im_weprintf(w, "couldn't reload, this image has no file associated with it."); -		winwidget_render_image(w, 0, 0); -		return; -	} - -	D(("resize %d, force_new %d\n", resize, force_new)); - -	free(FEH_FILE(w->file->data)->caption); -	FEH_FILE(w->file->data)->caption = NULL; - -	len = strlen(w->name) + sizeof("Reloading: ") + 1; -	new_title = emalloc(len); -	snprintf(new_title, len, "Reloading: %s", w->name); -	winwidget_rename(w, new_title); -	free(new_title); - -	old_w = gib_imlib_image_get_width(w->im); -	old_h = gib_imlib_image_get_height(w->im); - -	/* -	 * If we don't free the old image before loading the new one, Imlib2's -	 * caching will get in our way. -	 * However, if --reload is used (force_new == 0), we want to continue if -	 * the new image cannot be loaded, so we must not free the old image yet. -	 */ -	if (force_new) -		winwidget_free_image(w); - -	if ((feh_load_image(&tmp, FEH_FILE(w->file->data))) == 0) { -		if (force_new) -			eprintf("failed to reload image\n"); -		else { -			im_weprintf(w, "Couldn't reload image. Is it still there?"); -			winwidget_render_image(w, 0, 0); -		} -		return; -	} - -	if (!resize && ((old_w != gib_imlib_image_get_width(tmp)) || -			(old_h != gib_imlib_image_get_height(tmp)))) -		resize = 1; - -	if (!force_new) -		winwidget_free_image(w); - -	w->im = tmp; -	winwidget_reset_image(w); - -	w->mode = MODE_NORMAL; -	if ((w->im_w != gib_imlib_image_get_width(w->im)) -	    || (w->im_h != gib_imlib_image_get_height(w->im))) -		w->had_resize = 1; -	if (w->has_rotated) { -		Imlib_Image temp; - -		temp = gib_imlib_create_rotated_image(w->im, 0.0); -		w->im_w = gib_imlib_image_get_width(temp); -		w->im_h = gib_imlib_image_get_height(temp); -		gib_imlib_free_image_and_decache(temp); -	} else { -		w->im_w = gib_imlib_image_get_width(w->im); -		w->im_h = gib_imlib_image_get_height(w->im); -	} -	winwidget_render_image(w, resize, 0); - -	return; -} -  void slideshow_change_image(winwidget winwid, int change, int render)  {  	gib_list *last = NULL; | 
