void feh_prepare_filelist(void) { if (opt.list || opt.customlist || (opt.sort > SORT_FILENAME) || opt.preload) { /* For these sort options, we have to preload images */ filelist = feh_file_info_preload(filelist); if (!gib_list_length(filelist)) show_mini_usage(); } D(3, ("sort mode requested is: %d\n", opt.sort)); switch (opt.sort) { case SORT_NONE: if (opt.randomize) { /* Randomize the filename order */ filelist = gib_list_randomize(filelist); } else if (!opt.reverse) { /* Let's reverse the list. Its back-to-front right now ;) */ filelist = gib_list_reverse(filelist); } break; case SORT_NAME: filelist = gib_list_sort(filelist, feh_cmp_name); break; case SORT_FILENAME: filelist = gib_list_sort(filelist, feh_cmp_filename); break; case SORT_WIDTH: filelist = gib_list_sort(filelist, feh_cmp_width); break; case SORT_HEIGHT: filelist = gib_list_sort(filelist, feh_cmp_height); break; case SORT_PIXELS: filelist = gib_list_sort(filelist, feh_cmp_pixels); break; case SORT_SIZE: filelist = gib_list_sort(filelist, feh_cmp_size); break; case SORT_FORMAT: filelist = gib_list_sort(filelist, feh_cmp_format); break; default: break; } /* no point reversing a random list */ if (opt.reverse && (opt.sort != SORT_NONE)) { D(3, ("Reversing filelist as requested\n")); filelist = gib_list_reverse(filelist); } return; }
void cb_reload_timer(void *data) { gib_list *l; char *current_filename; winwidget w = (winwidget) data; /* save the current filename for refinding it in new list */ current_filename = estrdup(FEH_FILE(current_file->data)->filename); for (l = filelist; l; l = l->next) { feh_file_free(l->data); l->data = NULL; } gib_list_free_and_data(filelist); filelist = NULL; filelist_len = 0; current_file = NULL; /* rebuild filelist from original_file_items */ if (gib_list_length(original_file_items) > 0) for (l = gib_list_last(original_file_items); l; l = l->prev) add_file_to_filelist_recursively(l->data, FILELIST_FIRST); else if (!opt.filelistfile && !opt.bgmode) add_file_to_filelist_recursively(".", FILELIST_FIRST); if (!(filelist_len = gib_list_length(filelist))) { eprintf("No files found to reload."); } /* find the previously current file */ for (l = filelist; l; l = l->next) if (strcmp(FEH_FILE(l->data)->filename, current_filename) == 0) { current_file = l; break; } free(current_filename); filelist = gib_list_first(gib_list_reverse(filelist)); if (!current_file) current_file = filelist; w->file = current_file; /* reset window name in case of current file order, * filename, or filelist_length has changed. */ current_filename = slideshow_create_name(FEH_FILE(current_file->data), w); winwidget_rename(w, current_filename); free(current_filename); feh_reload_image(w, 1, 0); if (opt.reload) feh_add_unique_timer(cb_reload_timer, w, opt.reload); return; }