diff --git a/ChangeLog b/ChangeLog index c2075b63e532e53eced63d459320414619888b6f..cca05258e1f4e2e925c6e172e2cecd641ec09783 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ -git HEAD +Mon, 24 Dec 2012 15:45:54 +0100 Daniel Friesel <derf+feh@finalrewind.org> +* Release v2.8 * Do not apply --scale-down to the thumbnail window. It will be applied to windows opened from this, though. <https://github.com/derf/feh/issues/106> @@ -13,6 +14,10 @@ git HEAD * Treat quick, low-offset drags (1px or 2px move in <1 second) as clicks to improve graphics tablet support <https://github.com/derf/feh/issues/113> + * Respect --start-at in thumbnail mode + <https://github.com/derf/feh/issues/116> + * Make 'z' (jump_random) work in thumbnail mode as well, fix thumbnail + selection roll-over <https://github.com/derf/feh/issues/115> Tue, 16 Oct 2012 06:29:58 +0200 Daniel Friesel <derf+feh@finalrewind.org> diff --git a/src/keyevents.c b/src/keyevents.c index 18853edfecd360ec101a54f801d11a352a8c55a2..470d624e0d0ec66f0b3a5383cec367ed2bc01ac6 100644 --- a/src/keyevents.c +++ b/src/keyevents.c @@ -658,7 +658,10 @@ void feh_event_handle_keypress(XEvent * ev) opt.hide_pointer = !opt.hide_pointer; } else if (feh_is_kp(&keys.jump_random, keysym, state)) { - slideshow_change_image(winwid, SLIDE_RAND, 1); + if (winwid->type == WIN_TYPE_THUMBNAIL) + feh_thumbnail_select_next(winwid, rand() % (filelist_len - 1)); + else + slideshow_change_image(winwid, SLIDE_RAND, 1); } else if (feh_is_kp(&keys.toggle_caption, keysym, state)) { if (opt.caption_path) { diff --git a/src/thumbnail.c b/src/thumbnail.c index fbe2ce03a8208120237f89eeb6a38715de106df6..a77152a78594af7f4ffd24dab02f08d7e157458b 100644 --- a/src/thumbnail.c +++ b/src/thumbnail.c @@ -400,6 +400,16 @@ void init_thumbnail_mode(void) if (!opt.display) gib_imlib_free_image_and_decache(td.im_main); + else if (opt.start_list_at) { + for (l = thumbnails; l; l = l->next) { + if (!strcmp(opt.start_list_at, FEH_THUMB(l->data)->file->filename)) { + opt.start_list_at = NULL; + feh_thumbnail_select(winwid, FEH_THUMB(l->data)); + break; + } + } + } + free(s); return; @@ -776,36 +786,47 @@ void feh_thumbnail_select(winwidget winwid, feh_thumbnail *thumbnail) void feh_thumbnail_select_next(winwidget winwid, int jump) { - gib_list *l, *tmp; - int i; + gib_list *l; + feh_thumbnail *thumb; + int len = 0, cur = 0, target = 0; - for (l = thumbnails; l && l->next; l = l->next) { - tmp = l; - for (i = jump; (i > 0) && tmp->next; i--) - tmp = tmp->next; - if (tmp->data == td.selected) - break; + for (l = thumbnails; l; l = l->next) { + thumb = FEH_THUMB(l->data); + if (thumb == td.selected) + cur = len; + len++; } - feh_thumbnail_select(winwid, FEH_THUMB(l->data)); + target = (cur + len - jump) % len; + + for (l = thumbnails; l; l = l->next) { + if (target-- == 0) { + feh_thumbnail_select(winwid, FEH_THUMB(l->data)); + } + } } void feh_thumbnail_select_prev(winwidget winwid, int jump) { gib_list *l; feh_thumbnail *thumb; - int i; + int len = 0, cur = 0, target = 0; for (l = thumbnails; l; l = l->next) { thumb = FEH_THUMB(l->data); - if ((thumb == td.selected) && l->next) { - for (i = jump; (i > 0) && l->next; i--) - l = l->next; + if (thumb == td.selected) + cur = len; + len++; + } + + target = (cur + jump) % len; + + for (l = thumbnails; l; l = l->next) { + if (target-- == 0) { feh_thumbnail_select(winwid, FEH_THUMB(l->data)); - return; + break; } } - feh_thumbnail_select(winwid, FEH_THUMB(thumbnails->data)); } inline void feh_thumbnail_show_selected()