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);
}