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