summaryrefslogtreecommitdiff
path: root/program
diff options
context:
space:
mode:
authorAleksander Machniak <alec@alec.pl>2013-10-30 14:44:37 +0100
committerAleksander Machniak <alec@alec.pl>2013-10-30 14:44:37 +0100
commitbc35e865ae700b21ce6085aa33ba8354a2b09ac9 (patch)
treee004a508c1c85f3fe724da540689fd03be01e576 /program
parente19371aff0daa991d75aa803f43552721e3cd03d (diff)
Fix Ctrl+click selection after recent refactorings of keyboard nawigation on list widget
Diffstat (limited to 'program')
-rw-r--r--program/js/list.js40
1 files changed, 21 insertions, 19 deletions
diff --git a/program/js/list.js b/program/js/list.js
index 0f63c6dfc..15dd019e0 100644
--- a/program/js/list.js
+++ b/program/js/list.js
@@ -55,7 +55,6 @@ function rcube_list_widget(list, p)
this.column_fixed = null;
this.last_selected = 0;
this.shift_start = 0;
- this.in_selection_before = false;
this.focused = false;
this.drag_mouse_start = null;
this.dblclick_time = 500; // default value on MS Windows is 500
@@ -405,20 +404,15 @@ drag_column: function(e, col)
drag_row: function(e, id)
{
// don't do anything (another action processed before)
- var evtarget = rcube_event.get_target(e),
- tagname = evtarget.tagName.toLowerCase();
-
- if (evtarget && (tagname == 'input' || tagname == 'img' || (tagname != 'a' && evtarget.onclick)))
+ if (!this.is_event_target(e))
return true;
// accept right-clicks
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 (!this.in_selection_before) {
+ if (e && e.istouch || this.in_selection(id)) {
var mod_key = rcube_event.get_modifier(e);
this.select_row(id, mod_key, false);
}
@@ -446,22 +440,18 @@ drag_row: function(e, id)
*/
click_row: function(e, id)
{
- var now = new Date().getTime(),
- mod_key = rcube_event.get_modifier(e),
- evtarget = rcube_event.get_target(e),
- tagname = evtarget.tagName.toLowerCase();
-
- if ((evtarget && (tagname == 'input' || tagname == 'img')))
+ // don't do anything (another action processed before)
+ if (!this.is_event_target(e))
return true;
- var dblclicked = now - this.rows[id].clicked < this.dblclick_time;
+ var now = new Date().getTime(),
+ dblclicked = now - this.rows[id].clicked < this.dblclick_time;
- // selects/unselects currently selected row
- if (!this.drag_active && this.in_selection_before == id && !dblclicked)
- this.select_row(id, mod_key, true);
+ // selects (or unselects currently selected) row
+ if (!this.drag_active && !dblclicked)
+ 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)) {
@@ -482,6 +472,18 @@ click_row: function(e, id)
},
+/**
+ * Check target of the current event
+ */
+is_event_target: function(e)
+{
+ var target = rcube_event.get_target(e),
+ tagname = target.tagName.toLowerCase();
+
+ return !(target && (tagname == 'input' || tagname == 'img' || (tagname != 'a' && target.onclick)));
+},
+
+
/*
* Returns thread root ID for specified row ID
*/