diff --git a/src/events.c b/src/events.c index c0b1269124e8c2b306ea9aca6bc00bb33e279af5..def4651bbc9b190dbf035ecd13b19b706fa4fff6 100644 --- a/src/events.c +++ b/src/events.c @@ -114,7 +114,7 @@ static void feh_event_handle_ButtonPress(XEvent * ev) - winwid->im_y) / winwid->old_zoom; } else if (ev->xbutton.button == opt.reload_button) { D(("Reload Button Press event\n")); - feh_reload_image(winwid, 0, 0); + feh_reload_image(winwid, 0, 1); } else if (ev->xbutton.button == opt.prev_button) { D(("Prev Button Press event\n")); if (winwid->type == WIN_TYPE_SLIDESHOW) diff --git a/src/menu.c b/src/menu.c index 50aa50f109c2cb553c3e7af24de16448df9a0a44..8a3258be21fa408a69833c4e5a52f134b68da6db 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1302,7 +1302,7 @@ void feh_menu_cb(feh_menu * m, feh_menu_item * i, int action, void *data) winwidget_render_image(m->fehwin, 1, 0); break; case CB_RELOAD: - feh_reload_image(m->fehwin, 0, 0); + feh_reload_image(m->fehwin, 0, 1); break; case CB_REMOVE: feh_filelist_image_remove(m->fehwin, 0); diff --git a/src/slideshow.c b/src/slideshow.c index e47b8969c9b07a9ae215c1cbbd3ba4f236601da3..e6ffb56ce774437c16c271a6f7eed4d435475110 100644 --- a/src/slideshow.c +++ b/src/slideshow.c @@ -171,11 +171,19 @@ void feh_reload_image(winwidget w, int resize, int force_new) old_w = gib_imlib_image_get_width(w->im); old_h = gib_imlib_image_get_height(w->im); - /* if the image has changed in dimensions - we gotta resize */ + /* + * 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) { + if (force_new) eprintf("failed to reload image\n"); - } else { + else { im_weprintf(w, "Couldn't reload image. Is it still there?"); winwidget_render_image(w, 0, 0); } @@ -189,8 +197,8 @@ void feh_reload_image(winwidget w, int resize, int force_new) (old_h != gib_imlib_image_get_height(tmp)))) resize = 1; - /* force imlib2 not to cache */ - winwidget_free_image(w); + if (!force_new) + winwidget_free_image(w); w->im = tmp; winwidget_reset_image(w); diff --git a/src/thumbnail.c b/src/thumbnail.c index ee8b101f3469971844fe45ff4eca0a2c36dccc8f..0c8d00a882887a23c4b769bdd4065b5a7bd0d5c0 100644 --- a/src/thumbnail.c +++ b/src/thumbnail.c @@ -922,7 +922,7 @@ void feh_thumbnail_show_fullsize(feh_file *thumbfile) free(thumbwin->file); thumbwin->file = gib_list_add_front(NULL, thumbfile); winwidget_rename(thumbwin, s); - feh_reload_image(thumbwin, 1, 0); + feh_reload_image(thumbwin, 1, 1); } }