From: Teppo Kurki Date: Tue, 2 Jun 2015 13:29:57 +0000 (+0300) Subject: On progr. editor open, focus target cell if Grid had focus prior X-Git-Tag: 7.6.0.alpha1^0 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=eed4059ca05483f7874f45bfbd876b6c2dfe4bb0;p=vaadin-framework.git On progr. editor open, focus target cell if Grid had focus prior Change-Id: I8ad9100356a309309e1f8964d6bc293981b2a827 --- diff --git a/client/src/com/vaadin/client/widgets/Grid.java b/client/src/com/vaadin/client/widgets/Grid.java index 2717dc3580..db3cea58dc 100644 --- a/client/src/com/vaadin/client/widgets/Grid.java +++ b/client/src/com/vaadin/client/widgets/Grid.java @@ -1280,12 +1280,26 @@ public class Grid 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); + } } /** diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeatures.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeatures.java index c98ee5c53b..a9cc528ac0 100644 --- a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeatures.java +++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeatures.java @@ -127,6 +127,14 @@ public class GridBasicFeatures extends AbstractComponentTest { } }; + 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 { } } + }); + createBooleanAction("EditorOpeningItemClickListener", "State", false, + new Command() { + + @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() { diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridEditorTest.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridEditorTest.java index 0a6d884251..ba6c29522b 100644 --- a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridEditorTest.java +++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridEditorTest.java @@ -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() {