diff options
Diffstat (limited to 'src/slideshow.c')
-rw-r--r-- | src/slideshow.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/src/slideshow.c b/src/slideshow.c index 1a3ffe8..314374c 100644 --- a/src/slideshow.c +++ b/src/slideshow.c @@ -50,7 +50,6 @@ void init_slideshow_mode(void) file = FEH_FILE(l->data); if (last) { filelist = feh_file_remove_from_list(filelist, last); - filelist_len--; last = NULL; } current_file = l; @@ -128,6 +127,7 @@ void feh_reload_image(winwidget w, int resize, int force_new) winwidget_rename(w, title); free(title); free(new_title); + filelist = feh_file_remove_from_list(filelist, w->file); D_RETURN_(4); } if (force_new) { @@ -244,7 +244,6 @@ void slideshow_change_image(winwidget winwid, int change) if (last) { filelist = feh_file_remove_from_list(filelist, last); - filelist_len--; last = NULL; } s = slideshow_create_name(FEH_FILE(current_file->data)); @@ -268,18 +267,12 @@ void slideshow_change_image(winwidget winwid, int change) } else last = current_file; } - if (!success) { - /* We get here if three files in a row could not be loaded. - * However, it seems that this piece of code is never reached when feh - * would otherwise fail; it's only executed in the aforementioned case, - * causing slideshows to exit although there still are lots of working slides. - * - * So far, there is one known case were we should exit here: - * When viewing a set of files, externally removing all of them and then resizing - * the window in feh, feh will print lots of imlib errors and eventually segfault. - */ - weprintf("No more slides in show?"); - } + if (last) + filelist = feh_file_remove_from_list(filelist, last); + + if (filelist_len == 0) + eprintf("No more slides in show"); + if (opt.slideshow_delay >= 0.0) feh_add_timer(cb_slide_timer, winwid, opt.slideshow_delay, "SLIDE_CHANGE"); D_RETURN_(4); @@ -445,7 +438,6 @@ void feh_filelist_image_remove(winwidget winwid, char do_delete) doomed = current_file; slideshow_change_image(winwid, SLIDE_NEXT); - filelist_len--; if (do_delete) filelist = feh_file_rm_and_free(filelist, doomed); else @@ -460,7 +452,6 @@ void feh_filelist_image_remove(winwidget winwid, char do_delete) free(s); } else if ((winwid->type == WIN_TYPE_SINGLE) || (winwid->type == WIN_TYPE_THUMBNAIL_VIEWER)) { - filelist_len--; if (do_delete) filelist = feh_file_rm_and_free(filelist, winwid->file); else |