diff options
Diffstat (limited to 'program/js')
-rw-r--r-- | program/js/list.js | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/program/js/list.js b/program/js/list.js index 23a9c349c..c4f02402b 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -41,6 +41,7 @@ function rcube_list_widget(list, p) this.dont_select = false; this.drag_active = false; this.last_selected = 0; + this.shift_start = 0; this.in_selection_before = false; this.focused = false; this.drag_mouse_start = null; @@ -218,7 +219,7 @@ drag_row: function(e, id) if (this.draggable && this.selection.length) { this.drag_start = true; - this.drag_mouse_start = rcube_event.get_mouse_pos(e); + this.drag_mouse_start = rcube_event.get_mouse_pos(e); rcube_event.add_listener({element:document, event:'mousemove', object:this, method:'drag_mouse_move'}); rcube_event.add_listener({element:document, event:'mouseup', object:this, method:'drag_mouse_up'}); } @@ -301,6 +302,9 @@ select_row: function(id, mod_key, with_mouse) var select_before = this.selection.join(','); if (!this.multiselect) mod_key = 0; + + if (!this.shift_start) + this.shift_start = id if (!mod_key) { @@ -312,13 +316,12 @@ select_row: function(id, mod_key, with_mouse) switch (mod_key) { case SHIFT_KEY: - this.shift_select(id, false); + this.shift_select(id, false); break; case CONTROL_KEY: - this.shift_start = id; if (!with_mouse) - this.highlight_row(id, true); + this.highlight_row(id, true); break; case CONTROL_SHIFT_KEY: @@ -326,7 +329,7 @@ select_row: function(id, mod_key, with_mouse) break; default: - this.highlight_row(id, false); + this.highlight_row(id, false); break; } } @@ -337,6 +340,9 @@ select_row: function(id, mod_key, with_mouse) if (this.last_selected != 0 && this.rows[this.last_selected]) this.set_classname(this.rows[this.last_selected].obj, 'focused', false); + + if (!this.selection.length) + this.shift_start = null; this.last_selected = id; this.set_classname(this.rows[id].obj, 'focused', true); |