Fix T53476: File Browser: Selection Issue with 'fill' option.
authorBastien Montagne <montagne29@wanadoo.fr>
Tue, 5 Dec 2017 21:34:49 +0000 (22:34 +0100)
committerBastien Montagne <montagne29@wanadoo.fr>
Tue, 5 Dec 2017 21:34:49 +0000 (22:34 +0100)
Fill-selection would only go upward in list of items to find an already
selected one and fill-select all items in-between. Now, in case upward
search fails, it will also intent to go downward, effectiviely allowing
to 'fill-select' from bottom to top.

Note that top-to-bottom keeps priority (i.e. if a top-to-bottom
fill-selection is possible, it will always happen, even if a
bottom-to-top one is also possible).

source/blender/editors/space_file/file_ops.c

index cca33cdd1a7cef36b91889aee129637ee26392e4..217ce8f1d9ac186005b955199dae161e399a313e 100644 (file)
@@ -151,15 +151,25 @@ static FileSelection file_selection_get(bContext *C, const rcti *rect, bool fill
 
        /* if desired, fill the selection up from the last selected file to the current one */
        if (fill && (sel.last >= 0) && (sel.last < numfiles) ) {
-               int f = sel.last;
-               while (f >= 0) {
+               int f;
+               /* Try to find a smaller-index selected item. */
+               for (f = sel.last; f >= 0; f--) {
                        if (filelist_entry_select_index_get(sfile->files, f, CHECK_ALL) )
                                break;
-                       f--;
                }
                if (f >= 0) {
                        sel.first = f + 1;
                }
+               /* If none found, try to find a higher-index selected item. */
+               else {
+                       for (f = sel.first; f < numfiles; f++) {
+                               if (filelist_entry_select_index_get(sfile->files, f, CHECK_ALL) )
+                                       break;
+                       }
+                       if (f < numfiles) {
+                               sel.last = f - 1;
+                       }
+               }
        }
        return sel;
 }