# HG changeset patch # User zas_ # Date 1207132854 0 # Node ID 7670d5653e1f4c002ec22f9e2c5328ee633ecc18 # Parent 92d2444893b8b7aa106171d85cccf08097085ca4 Honor selection while fullscreen navigation. The behavior is now consistent in full screen and windowed mode. It fixes the fact that the selection was discarded on "Next". Patch by Uwe Ohse. Cleanups by Laurent Monin. diff -r 92d2444893b8 -r 7670d5653e1f src/layout_image.c --- a/src/layout_image.c Tue Apr 01 07:42:31 2008 +0000 +++ b/src/layout_image.c Wed Apr 02 10:40:54 2008 +0000 @@ -1159,6 +1159,44 @@ read_ahead_fd = layout_list_get_fd(lw, index + 1); } + if (layout_selection_count(lw, 0) > 1) + { + GList *x = layout_selection_list_by_index(lw); + GList *y; + GList *last; + + for (last = y = x; y; y = y->next) + last = y; + for (y = x; y && ((gint)y->data) != index; y = y->next) + ; + + if (y) + { + gint newindex; + + if ((index > old && (index != (gint) last->data || old != (gint) x->data)) + || (old == (gint) last->data && index == (gint) x->data)) + { + if (y->next) + newindex = (gint) y->next->data; + else + newindex = (gint) x->data; + } + else + { + if (y->prev) + newindex = (gint) y->prev->data; + else + newindex = (gint) last->data; + } + + read_ahead_fd = layout_list_get_fd(lw, newindex); + } + + while (x) + x = g_list_remove(x, x->data); + } + layout_image_set_with_ahead(lw, fd, read_ahead_fd); } @@ -1260,6 +1298,27 @@ return; } + if (layout_selection_count(lw, 0) > 1) + { + GList *x = layout_selection_list_by_index(lw); + gint old = layout_list_get_index(lw, layout_image_get_path(lw)); + GList *y; + + for (y = x; y && ((gint) y->data) != old; y = y->next) + ; + if (y) + { + if (y->next) + layout_image_set_index(lw, (gint) y->next->data); + else + layout_image_set_index(lw, (gint) x->data); + } + while (x) + x = g_list_remove(x, x->data); + if (y) /* not dereferenced */ + return; + } + cd = image_get_collection(lw->image, &info); if (cd && info) @@ -1309,6 +1368,30 @@ return; } + if (layout_selection_count(lw, 0) > 1) + { + GList *x = layout_selection_list_by_index(lw); + gint old = layout_list_get_index(lw, layout_image_get_path(lw)); + GList *y; + GList *last; + + for (last = y = x; y; y = y->next) + last = y; + for (y = x; y && ((gint) y->data) != old; y = y->next) + ; + if (y) + { + if (y->prev) + layout_image_set_index(lw, (gint) y->prev->data); + else + layout_image_set_index(lw, (gint) last->data); + } + while (x) + x = g_list_remove(x, x->data); + if (y) /* not dereferenced */ + return; + } + cd = image_get_collection(lw->image, &info); if (cd && info)