From ada51d1d0eac8a1c4448a664c42e8712bce9e650 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Sat, 19 Oct 2013 09:51:30 -0400
Subject: [PATCH] Merge branch 'master' of github.com:roundcube/roundcubemail

---
 program/js/list.js |   29 ++++++++++-------------------
 1 files changed, 10 insertions(+), 19 deletions(-)

diff --git a/program/js/list.js b/program/js/list.js
index 76582d1..cb69bc4 100644
--- a/program/js/list.js
+++ b/program/js/list.js
@@ -35,7 +35,7 @@
   this.tbody;
   this.fixed_header;
   this.frame = null;
-  this.rows = [];
+  this.rows = {};
   this.selection = [];
   this.rowcount = 0;
   this.colcount = 0;
@@ -50,7 +50,6 @@
   this.keyboard = false;
   this.toggleselect = false;
 
-  this.dont_select = false;
   this.drag_active = false;
   this.col_drag_active = false;
   this.column_fixed = null;
@@ -86,7 +85,7 @@
   }
 
   if (this.tbody) {
-    this.rows = [];
+    this.rows = {};
     this.rowcount = 0;
 
     var r, len, rows = this.tbody.childNodes;
@@ -240,7 +239,7 @@
     $(this.row_tagname() + ':not(.thead)', this.tbody).remove();
   }
 
-  this.rows = [];
+  this.rows = {};
   this.rowcount = 0;
 
   if (sel)
@@ -409,14 +408,14 @@
   var evtarget = rcube_event.get_target(e),
     tagname = evtarget.tagName.toLowerCase();
 
-  if (this.dont_select || (evtarget && (tagname == 'input' || tagname == 'img')))
+  if (evtarget && (tagname == 'input' || tagname == 'img' || (tagname != 'a' && evtarget.onclick)))
     return true;
 
   // accept right-clicks
   if (rcube_event.get_button(e) == 2)
     return true;
 
-  this.in_selection_before = e.istouch || this.in_selection(id) ? id : false;
+  this.in_selection_before = e && e.istouch || this.in_selection(id) ? id : false;
 
   // selects currently unselected row
   if (!this.in_selection_before) {
@@ -455,12 +454,6 @@
   if ((evtarget && (tagname == 'input' || tagname == 'img')))
     return true;
 
-  // don't do anything (another action processed before)
-  if (this.dont_select) {
-    this.dont_select = false;
-    return false;
-  }
-
   var dblclicked = now - this.rows[id].clicked < this.dblclick_time;
 
   // unselects currently selected row
@@ -471,7 +464,7 @@
   this.in_selection_before = false;
 
   // row was double clicked
-  if (this.rows && dblclicked && this.in_selection(id)) {
+  if (this.rowcount && dblclicked && this.in_selection(id)) {
     this.triggerEvent('dblclick');
     now = 0;
   }
@@ -509,8 +502,6 @@
     evtarget = rcube_event.get_target(e),
     mod_key = rcube_event.get_modifier(e);
 
-  // Don't select this message
-  this.dont_select = true;
   // Don't treat double click on the expando as double click on the message.
   row.clicked = 0;
 
@@ -703,7 +694,7 @@
  */
 get_next_row: function()
 {
-  if (!this.rows)
+  if (!this.rowcount)
     return false;
 
   var last_selected_row = this.rows[this.last_selected],
@@ -717,7 +708,7 @@
 
 get_prev_row: function()
 {
-  if (!this.rows)
+  if (!this.rowcount)
     return false;
 
   var last_selected_row = this.rows[this.last_selected],
@@ -969,7 +960,7 @@
  */
 select_all: function(filter)
 {
-  if (!this.rows || !this.rows.length)
+  if (!this.rowcount)
     return false;
 
   // reset but remember selection first
@@ -1001,7 +992,7 @@
  */
 invert_selection: function()
 {
-  if (!this.rows || !this.rows.length)
+  if (!this.rowcount)
     return false;
 
   // remember old selection

--
Gitblit v1.9.1