]> source.dussan.org Git - vaadin-framework.git/commitdiff
#6026 Keyboard multiselection in Firefox broken in Table and Tree
authorArtur Signell <artur.signell@itmill.com>
Tue, 14 Dec 2010 08:50:56 +0000 (08:50 +0000)
committerArtur Signell <artur.signell@itmill.com>
Tue, 14 Dec 2010 08:50:56 +0000 (08:50 +0000)
svn changeset:16483/svn branch:6.5

src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java
src/com/vaadin/terminal/gwt/client/ui/VTree.java

index fe3b4713f5b4de2f72a60fcfcba8b9033950a02e..645266f0f1881a9a4d67db642e4d42a7a3f2ca15 100644 (file)
@@ -135,6 +135,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
     public static final char ALIGN_CENTER = 'c';
     public static final char ALIGN_LEFT = 'b';
     public static final char ALIGN_RIGHT = 'e';
+    private static final int CHARCODE_SPACE = 32;
     private int firstRowInViewPort = 0;
     private int pageLength = 15;
     private int lastRequestedFirstvisible = 0; // to detect "serverside scroll"
@@ -574,7 +575,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
      * @return
      */
     protected int getNavigationSelectKey() {
-        return 32;
+        return CHARCODE_SPACE;
     }
 
     /**
@@ -5411,14 +5412,24 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
      * .gwt.event.dom.client.KeyPressEvent)
      */
     public void onKeyPress(KeyPressEvent event) {
+        // This is used for Firefox only
+        if (!BrowserInfo.get().isGecko()) {
+            return;
+        }
+
         if (!enabled) {
             // Cancel default keyboard events on a disabled Table (prevents
             // scrolling)
             event.preventDefault();
         } else if (hasFocus) {
-            int keyCode = event.getNativeEvent().getKeyCode();
-            if (keyCode == 0) {
-                keyCode = event.getNativeEvent().getCharCode();
+            // Key code in Firefox/onKeyPress is present only for special keys,
+            // otherwise 0 is returned
+            NativeEvent nativeEvent = event.getNativeEvent();
+            int keyCode = nativeEvent.getKeyCode();
+            if (keyCode == 0 && nativeEvent.getCharCode() == ' ') {
+                // Provide a keyCode for space to be compatible with FireFox
+                // keypress event
+                keyCode = CHARCODE_SPACE;
             }
 
             if (handleNavigation(keyCode,
index ec09b4299bdbf0aa13f2221c14507da46786823f..ade730bd45f2c51f46ef0ce17764fbd1f216402a 100644 (file)
@@ -63,6 +63,8 @@ public class VTree extends SimpleFocusablePanel implements Paintable,
     public static final int MULTISELECT_MODE_DEFAULT = 0;
     public static final int MULTISELECT_MODE_SIMPLE = 1;
 
+    private static final int CHARCODE_SPACE = 32;
+
     private final FlowPanel body = new FlowPanel();
 
     private Set<String> selectedIds = new HashSet<String>();
@@ -1556,9 +1558,12 @@ public class VTree extends SimpleFocusablePanel implements Paintable,
      * .gwt.event.dom.client.KeyPressEvent)
      */
     public void onKeyPress(KeyPressEvent event) {
-        int keyCode = event.getNativeEvent().getKeyCode();
-        if (keyCode == 0) {
-            keyCode = event.getNativeEvent().getCharCode();
+        NativeEvent nativeEvent = event.getNativeEvent();
+        int keyCode = nativeEvent.getKeyCode();
+        if (keyCode == 0 && nativeEvent.getCharCode() == ' ') {
+            // Provide a keyCode for space to be compatible with FireFox
+            // keypress event
+            keyCode = CHARCODE_SPACE;
         }
         if (handleKeyNavigation(keyCode,
                 event.isControlKeyDown() || event.isMetaKeyDown(),
@@ -1873,7 +1878,7 @@ public class VTree extends SimpleFocusablePanel implements Paintable,
      * @return
      */
     protected int getNavigationSelectKey() {
-        return 32;
+        return CHARCODE_SPACE;
     }
 
     /**