summaryrefslogtreecommitdiff
path: root/program/js/list.js
diff options
context:
space:
mode:
Diffstat (limited to 'program/js/list.js')
-rw-r--r--program/js/list.js14
1 files changed, 10 insertions, 4 deletions
diff --git a/program/js/list.js b/program/js/list.js
index b2d4f8a63..e1d57745c 100644
--- a/program/js/list.js
+++ b/program/js/list.js
@@ -412,15 +412,18 @@ drag_row: function(e, id)
if (rcube_event.get_button(e) == 2)
return true;
+ this.in_selection_before = e && e.istouch || this.in_selection(id) ? id : false;
+
// selects currently unselected row
- if (!(e && e.istouch || this.in_selection(id))) {
+ if (!this.in_selection_before) {
var mod_key = rcube_event.get_modifier(e);
- this.select_row(id, mod_key, false);
+ this.select_row(id, mod_key, true);
}
if (this.draggable && this.selection.length && this.in_selection(id)) {
this.drag_start = true;
this.drag_mouse_start = rcube_event.get_mouse_pos(e);
+
rcube_event.add_listener({event:'mousemove', object:this, method:'drag_mouse_move'});
rcube_event.add_listener({event:'mouseup', object:this, method:'drag_mouse_up'});
if (bw.touch) {
@@ -448,11 +451,12 @@ click_row: function(e, id)
var now = new Date().getTime(),
dblclicked = now - this.rows[id].clicked < this.dblclick_time;
- // selects (or unselects currently selected) row
- if (!this.drag_active && !dblclicked)
+ // unselects currently selected row
+ if (!this.drag_active && !dblclicked && this.in_selection_before == id)
this.select_row(id, rcube_event.get_modifier(e), true);
this.drag_start = false;
+ this.in_selection_before = false;
// row was double clicked
if (this.rowcount && dblclicked && this.in_selection(id)) {
@@ -772,6 +776,7 @@ get_cell: function(row, index)
select_row: function(id, mod_key, with_mouse)
{
var select_before = this.selection.join(',');
+
if (!this.multiselect)
mod_key = 0;
@@ -802,6 +807,7 @@ select_row: function(id, mod_key, with_mouse)
this.highlight_row(id, false);
break;
}
+
this.multi_selecting = true;
}