From 48e340a82938a83ff337eadb7d6d64c2b13acffe Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Wed, 13 Aug 2014 12:25:09 -0400
Subject: [PATCH] Allow focussing treelist item checkboxes with tab and normal list navigation with cursor keys (#1489648)

---
 program/js/treelist.js |    5 +++--
 program/js/app.js      |    1 +
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index 5a87347..a8e66e2 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -5745,6 +5745,7 @@
 
     this.subscription_list = new rcube_treelist_widget(this.gui_objects.subscriptionlist, {
         selectable: true,
+        tabexit: false,
         id_prefix: 'rcmli',
         id_encode: this.html_identifier_encode,
         id_decode: this.html_identifier_decode,
diff --git a/program/js/treelist.js b/program/js/treelist.js
index 5e6d326..3a13602 100644
--- a/program/js/treelist.js
+++ b/program/js/treelist.js
@@ -46,6 +46,7 @@
     scroll_speed: 20,
     save_state: false,
     keyboard: true,
+    tabexit: true,
     check_droptarget: function(node) { return !node.virtual; }
   }, p || {});
 
@@ -810,7 +811,7 @@
     var target = e.target || {},
       keyCode = rcube_event.get_keycode(e);
 
-    if (!has_focus || target.nodeName == 'INPUT' || target.nodeName == 'TEXTAREA' || target.nodeName == 'SELECT')
+    if (!has_focus || target.nodeName == 'INPUT' && keyCode != 38 && keyCode != 40 || target.nodeName == 'TEXTAREA' || target.nodeName == 'SELECT')
       return true;
 
     switch (keyCode) {
@@ -836,7 +837,7 @@
         return false;
 
       case 9:  // Tab
-        if (p.keyboard) {
+        if (p.keyboard && p.tabexit) {
           // jump to last/first item to move focus away from the treelist widget by tab
           var limit = rcube_event.get_modifier(e) == SHIFT_KEY ? 'first' : 'last';
           focus_noscroll(container.find('li[role=treeitem]:has(a)')[limit]().find('a:'+limit));

--
Gitblit v1.9.1