]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix selection with space in TreeGrid/Tree
authorHenri Sara <hesara@vaadin.com>
Tue, 9 May 2017 06:18:47 +0000 (09:18 +0300)
committerHenri Sara <henri.sara@gmail.com>
Wed, 10 May 2017 09:37:58 +0000 (12:37 +0300)
Makes subclasses of Grid call custom key and mouse event handlers.

client/src/main/java/com/vaadin/client/widgets/Grid.java
uitest/src/test/java/com/vaadin/tests/components/treegrid/TreeGridBasicFeaturesTest.java

index 27db38c4a116b05c13bf0b294b12992d9c67bf68..f94c45f780dc75f13efee3f18ad5440495126a8c 100755 (executable)
@@ -2318,7 +2318,7 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
             if (!Element.is(target)) {
                 return null;
             }
-            return WidgetUtil.findWidget(Element.as(target), Grid.class);
+            return WidgetUtil.findWidget(Element.as(target), Grid.class, false);
         }
 
         /**
@@ -2385,7 +2385,7 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
             if (!Element.is(target)) {
                 return null;
             }
-            return WidgetUtil.findWidget(Element.as(target), Grid.class);
+            return WidgetUtil.findWidget(Element.as(target), Grid.class, false);
         }
 
         /**
@@ -5623,7 +5623,7 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
                 if (renderer instanceof WidgetRenderer) {
                     try {
                         Widget w = WidgetUtil.findWidget(
-                                cell.getElement().getFirstChildElement(), null);
+                                cell.getElement().getFirstChildElement());
                         if (w != null) {
 
                             // Logical detach
@@ -7459,7 +7459,7 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
     }
 
     private boolean isElementInChildWidget(Element e) {
-        Widget w = WidgetUtil.findWidget(e, null);
+        Widget w = WidgetUtil.findWidget(e);
 
         if (w == this) {
             return false;
index b1b4da2c7497d07a7f1fd9b27c77940bcda8bcba..18b320abba272d51920df0d8c867fc5d2b0bb1bd 100644 (file)
@@ -192,6 +192,51 @@ public class TreeGridBasicFeaturesTest extends MultiBrowserTest {
         assertNoErrorNotifications();
     }
 
+    @Test
+    public void keyboard_selection() {
+        grid.getRow(0).getCell(0).click();
+
+        // Should expand "0 | 0" without moving focus
+        new Actions(getDriver()).sendKeys(Keys.RIGHT).perform();
+        assertEquals(6, grid.getRowCount());
+        assertCellTexts(1, 0, new String[] { "1 | 0", "1 | 1", "1 | 2" });
+
+        // Should navigate 2 times down to "1 | 1"
+        new Actions(getDriver()).sendKeys(Keys.DOWN, Keys.DOWN).perform();
+        assertEquals(6, grid.getRowCount());
+        assertCellTexts(1, 0, new String[] { "1 | 0", "1 | 1", "1 | 2" });
+        assertFalse(
+                grid.getRow(0).hasClassName("v-treegrid-rowmode-row-focused"));
+        assertFalse(
+                grid.getRow(1).hasClassName("v-treegrid-rowmode-row-focused"));
+        assertTrue(
+                grid.getRow(2).hasClassName("v-treegrid-rowmode-row-focused"));
+
+        // Should select "1 | 1" without moving focus
+        new Actions(getDriver()).sendKeys(Keys.SPACE).perform();
+        assertTrue(grid.getRow(2).hasClassName("v-treegrid-row-selected"));
+
+        // Should move focus but not selection
+        new Actions(getDriver()).sendKeys(Keys.UP).perform();
+        assertTrue(
+                grid.getRow(1).hasClassName("v-treegrid-rowmode-row-focused"));
+        assertFalse(
+                grid.getRow(2).hasClassName("v-treegrid-rowmode-row-focused"));
+        assertFalse(grid.getRow(1).hasClassName("v-treegrid-row-selected"));
+        assertTrue(grid.getRow(2).hasClassName("v-treegrid-row-selected"));
+
+        // Should select "1 | 0" without moving focus
+        new Actions(getDriver()).sendKeys(Keys.SPACE).perform();
+        assertTrue(
+                grid.getRow(1).hasClassName("v-treegrid-rowmode-row-focused"));
+        assertFalse(
+                grid.getRow(2).hasClassName("v-treegrid-rowmode-row-focused"));
+        assertTrue(grid.getRow(1).hasClassName("v-treegrid-row-selected"));
+        assertFalse(grid.getRow(2).hasClassName("v-treegrid-row-selected"));
+
+        assertNoErrorNotifications();
+    }
+
     @Test
     public void changing_hierarchy_column() {
         assertTrue(grid.getRow(0).getCell(0)