Reviewers: pdr,

Description:
Fixing a bug in CellTable and CellList where we get an index out of
bounds exception if we try to access the keyboard selected element when
keyboard selection is disabled.


Please review this at http://gwt-code-reviews.appspot.com/1225801/show

Affected files:
  M user/src/com/google/gwt/user/cellview/client/CellList.java
  M user/src/com/google/gwt/user/cellview/client/CellTable.java
M user/test/com/google/gwt/user/cellview/client/AbstractHasDataTestBase.java


Index: user/src/com/google/gwt/user/cellview/client/CellList.java
===================================================================
--- user/src/com/google/gwt/user/cellview/client/CellList.java (revision 9436) +++ user/src/com/google/gwt/user/cellview/client/CellList.java (working copy)
@@ -340,7 +340,7 @@
   protected Element getKeyboardSelectedElement() {
     // Do not use getRowElement() because that will flush the presenter.
     int rowIndex = getKeyboardSelectedRow();
-    if (childContainer.getChildCount() > rowIndex) {
+    if (rowIndex >= 0 && childContainer.getChildCount() > rowIndex) {
       return childContainer.getChild(rowIndex).cast();
     }
     return null;
Index: user/src/com/google/gwt/user/cellview/client/CellTable.java
===================================================================
--- user/src/com/google/gwt/user/cellview/client/CellTable.java (revision 9436) +++ user/src/com/google/gwt/user/cellview/client/CellTable.java (working copy)
@@ -988,7 +988,7 @@
     // Do not use getRowElement() because that will flush the presenter.
     int rowIndex = getKeyboardSelectedRow();
     NodeList<TableRowElement> rows = tbody.getRows();
-    if (rowIndex < rows.getLength() && columns.size() > 0) {
+ if (rowIndex >= 0 && rowIndex < rows.getLength() && columns.size() > 0) {
       TableRowElement tr = rows.getItem(rowIndex);
       TableCellElement td = tr.getCells().getItem(keyboardSelectedColumn);
       return getCellParent(td);
Index: user/test/com/google/gwt/user/cellview/client/AbstractHasDataTestBase.java
===================================================================
--- user/test/com/google/gwt/user/cellview/client/AbstractHasDataTestBase.java (revision 9436) +++ user/test/com/google/gwt/user/cellview/client/AbstractHasDataTestBase.java (working copy)
@@ -25,6 +25,7 @@
 import com.google.gwt.regexp.shared.MatchResult;
 import com.google.gwt.regexp.shared.RegExp;
 import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.view.client.ListDataProvider;
 import com.google.gwt.view.client.Range;
@@ -143,6 +144,21 @@
     assertEquals("test 10", items.get(0));
     assertEquals("test 11", items.get(1));
     assertEquals("test 12", items.get(2));
+  }
+
+  /**
+   * Test that we don't get any errors when keyboard selection is disabled.
+   */
+  public void testKeyboardSelectionPolicyDisabled() {
+ AbstractHasData<String> display = createAbstractHasData(new TextCell());
+    display.setRowData(createData(0, 10));
+    display.getPresenter().flush();
+    display.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.DISABLED);
+
+    assertNull(display.getKeyboardSelectedElement());
+    display.resetFocusOnCell();
+    display.setAccessKey('a');
+    display.setTabIndex(1);
   }

   public void testResetFocus() {


--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to