]> source.dussan.org Git - vaadin-framework.git/commitdiff
On progr. editor open, focus target cell if Grid had focus prior 7.6.0.alpha1
authorTeppo Kurki <teppo.kurki@vaadin.com>
Tue, 2 Jun 2015 13:29:57 +0000 (16:29 +0300)
committerTeppo Kurki <teppo.kurki@vaadin.com>
Wed, 3 Jun 2015 11:36:03 +0000 (11:36 +0000)
Change-Id: I8ad9100356a309309e1f8964d6bc293981b2a827

client/src/com/vaadin/client/widgets/Grid.java
uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeatures.java
uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridEditorTest.java

index 2717dc35800caa4a92e875376eaa0a4e1859f9b1..db3cea58dc555f549beaf656934d3d881cdfceb4 100644 (file)
@@ -1280,12 +1280,26 @@ public class Grid<T> extends ResizeComposite implements
         }
 
         /**
-         * Equivalent to {@code editRow(rowIndex, -1)}.
+         * If a cell of this Grid had focus once this editRow call was
+         * triggered, the editor component at the previously focused column
+         * index will be focused.
+         * 
+         * If a Grid cell was not focused prior to calling this method, it will
+         * be equivalent to {@code editRow(rowIndex, -1)}.
          * 
          * @see #editRow(int, int)
          */
         public void editRow(int rowIndex) {
-            editRow(rowIndex, -1);
+            // Focus the last focused column in the editor iff grid or its child
+            // was focused before the edit request
+            Cell focusedCell = grid.cellFocusHandler.getFocusedCell();
+            if (focusedCell != null
+                    && grid.getElement().isOrHasChild(
+                            WidgetUtil.getFocusedElement())) {
+                editRow(rowIndex, focusedCell.getColumn());
+            } else {
+                editRow(rowIndex, -1);
+            }
         }
 
         /**
index c98ee5c53bf6cdaf4af056c106be324b50ad72c0..a9cc528ac0496e30ec74df65accfc13d59065c8f 100644 (file)
@@ -127,6 +127,14 @@ public class GridBasicFeatures extends AbstractComponentTest<Grid> {
         }
     };
 
+    private ItemClickListener editorOpeningItemClickListener = new ItemClickListener() {
+
+        @Override
+        public void itemClick(ItemClickEvent event) {
+            grid.editItem(event.getItemId());
+        }
+    };
+
     private ColumnReorderListener columnReorderListener = new ColumnReorderListener() {
 
         @Override
@@ -642,6 +650,19 @@ public class GridBasicFeatures extends AbstractComponentTest<Grid> {
                         }
                     }
 
+                });
+        createBooleanAction("EditorOpeningItemClickListener", "State", false,
+                new Command<Grid, Boolean>() {
+
+                    @Override
+                    public void execute(Grid c, Boolean value, Object data) {
+                        if (!value) {
+                            c.removeItemClickListener(editorOpeningItemClickListener);
+                        } else {
+                            c.addItemClickListener(editorOpeningItemClickListener);
+                        }
+                    }
+
                 });
         createBooleanAction("ColumnReorderListener", "State", false,
                 new Command<Grid, Boolean>() {
index 0a6d884251dec628e901332b69287c5a948e366c..ba6c29522b8b9b5d379178edf70d5670de87d5d7 100644 (file)
@@ -161,6 +161,20 @@ public abstract class GridEditorTest extends GridBasicFeaturesTest {
         assertEquals("", cell.getText(), focused.getAttribute("value"));
     }
 
+    @Test
+    public void testFocusOnProgrammaticOpenOnItemClick() {
+        selectMenuPath("Component", "State", "EditorOpeningItemClickListener");
+
+        GridCellElement cell = getGridElement().getCell(4, 2);
+
+        cell.click();
+
+        WebElement focused = getFocusedElement();
+
+        assertEquals("", "input", focused.getTagName());
+        assertEquals("", cell.getText(), focused.getAttribute("value"));
+    }
+
     @Test
     public void testNoFocusOnProgrammaticOpen() {