Update the cell table to handle events that happen within a td element but outside of the cell's main div element. Fixes issue 7508: https://code.google.com/p/google-web-toolkit/issues/detail?id=7508 . Review at http://gwt-code-reviews.appspot.com/1879803 git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@11470 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java b/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java index bc3d7cb..91e2c6d 100644 --- a/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java +++ b/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java
@@ -1793,6 +1793,16 @@ { Element maybeTableCell = null; Element cur = target; + + /* + * If an event happens in the TD element but outside the cell's div, we want + * to handle it as if it happened within the table cell. + */ + if (TableCellElement.TAG_TD.equalsIgnoreCase(cur.getTagName()) && + tableBuilder.isColumn(cur.getFirstChildElement())) { + cur = cur.getFirstChildElement(); + } + while (cur != null && targetTableSection == null) { /* * Found the table section. Return the most recent cell element that we
diff --git a/user/test/com/google/gwt/user/cellview/client/AbstractCellTableTestBase.java b/user/test/com/google/gwt/user/cellview/client/AbstractCellTableTestBase.java index 3e1177e..1b74f13 100644 --- a/user/test/com/google/gwt/user/cellview/client/AbstractCellTableTestBase.java +++ b/user/test/com/google/gwt/user/cellview/client/AbstractCellTableTestBase.java
@@ -269,16 +269,23 @@ public void testCellEvent() { IndexCell<String> cell = new IndexCell<String>("click"); T table = createAbstractHasData(cell); + RootPanel.get().add(table); table.setRowData(createData(0, 10)); table.getPresenter().flush(); - // Trigger an event at index 5. + // Trigger an event at index 5 inside the child div. NativeEvent event = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false); getBodyElement(table, 5, 0).getFirstChildElement().dispatchEvent(event); cell.assertLastBrowserEventIndex(5); cell.assertLastEditingIndex(5); + // Trigger an event at index 3 outside the child div. + event = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false); + getBodyElement(table, 3, 0).dispatchEvent(event); + cell.assertLastBrowserEventIndex(3); + cell.assertLastEditingIndex(3); + RootPanel.get().remove(table); }