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