From 74052d49b9b8b12897a72c87445e5e6064c5001e Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Mon, 16 Jun 2014 06:01:30 -0400
Subject: [PATCH] Avoid scrolling when moving focus from a treelist widget (#1489929)

---
 program/js/treelist.js |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/program/js/treelist.js b/program/js/treelist.js
index cce4d17..ea17298 100644
--- a/program/js/treelist.js
+++ b/program/js/treelist.js
@@ -755,7 +755,7 @@
       case 9:  // Tab
         // 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';
-        container.find('li[role=treeitem]:has(a)')[limit]().find('a:'+limit).focus();
+        focus_noscroll(container.find('li[role=treeitem]:has(a)')[limit]().find('a:'+limit));
         break;
     }
 
@@ -788,6 +788,19 @@
     }
   }
 
+  /**
+   * Focus the given element without scrolling the list container
+   */
+  function focus_noscroll(elem)
+  {
+    if (elem.length) {
+      var frame = container.parent().get(0) || { scrollTop:0 },
+        y = frame.scrollTop || frame.scrollY;
+      elem.focus();
+      frame.scrollTop = y;
+    }
+  }
+
 
   ///// drag & drop support
 

--
Gitblit v1.9.1