summaryrefslogtreecommitdiff
path: root/program/js
diff options
context:
space:
mode:
Diffstat (limited to 'program/js')
-rw-r--r--program/js/list.js16
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);