Revision: 9220
Author: [email protected]
Date: Fri Nov 12 11:57:52 2010
Log: Switching CellList to trigger selection on click instead of mousedown.
Selection causes the cell to be redrawn, which interrupts the click event
sequence and prevents click from ever firing to the Cell. This is
particularly annoying for Cells that contain Buttons. The same change needs
to be made for keyboard selection, which can be bound to selection and
cause the cell to be redrawn. CellTable already triggers selection on
click, and now triggers keyboard selection on click.
Review at http://gwt-code-reviews.appspot.com/1102801
Review by: [email protected]
http://code.google.com/p/google-web-toolkit/source/detail?r=9220
Modified:
/trunk/user/src/com/google/gwt/user/cellview/client/AbstractHasData.java
/trunk/user/src/com/google/gwt/user/cellview/client/CellList.java
/trunk/user/src/com/google/gwt/user/cellview/client/CellTable.java
=======================================
---
/trunk/user/src/com/google/gwt/user/cellview/client/AbstractHasData.java
Tue Nov 9 07:53:09 2010
+++
/trunk/user/src/com/google/gwt/user/cellview/client/AbstractHasData.java
Fri Nov 12 11:57:52 2010
@@ -270,8 +270,9 @@
Set<String> eventTypes = new HashSet<String>();
eventTypes.add("focus");
eventTypes.add("blur");
- eventTypes.add("keydown");
- eventTypes.add("mousedown"); // Used by subclasses to steal focus.
+ eventTypes.add("keydown"); // Used for keyboard navigation.
+ eventTypes.add("click"); // Used by subclasses for selection.
+ eventTypes.add("mousedown"); // No longer used, but here for legacy
support.
CellBasedWidgetImpl.get().sinkEvents(this, eventTypes);
}
=======================================
--- /trunk/user/src/com/google/gwt/user/cellview/client/CellList.java Tue
Nov 9 07:53:09 2010
+++ /trunk/user/src/com/google/gwt/user/cellview/client/CellList.java Fri
Nov 12 11:57:52 2010
@@ -379,7 +379,7 @@
// before firing the event to the cell in case the cell operates on
the
// currently selected item.
String eventType = event.getType();
- boolean isMouseDown = "mousedown".equals(eventType);
+ boolean isClick = "click".equals(eventType);
int idx = Integer.parseInt(idxString);
int indexOnPage = idx - getPageStart();
if (!isRowWithinBounds(indexOnPage)) {
@@ -390,12 +390,12 @@
// Get the cell parent before doing selection in case the list is
redrawn.
Element cellParent = getCellParent(cellTarget);
T value = getDisplayedItem(indexOnPage);
- if (isMouseDown && !cell.handlesSelection()) {
+ if (isClick && !cell.handlesSelection()) {
doSelection(event, value, indexOnPage);
}
// Focus on the cell.
- if (isMouseDown
+ if (isClick
&& getPresenter().getKeyboardSelectedRowInView() != indexOnPage)
{
/*
* If the selected element is natively focusable, then we do not
want to
=======================================
--- /trunk/user/src/com/google/gwt/user/cellview/client/CellTable.java Tue
Nov 9 07:53:09 2010
+++ /trunk/user/src/com/google/gwt/user/cellview/client/CellTable.java Fri
Nov 12 11:57:52 2010
@@ -563,7 +563,6 @@
// Sink events.
Set<String> eventTypes = new HashSet<String>();
- eventTypes.add("click");
eventTypes.add("mouseover");
eventTypes.add("mouseout");
CellBasedWidgetImpl.get().sinkEvents(this, eventTypes);
@@ -926,7 +925,7 @@
}
} else if (section == tbody) {
// Update the hover state.
- boolean isMouseDown = "mousedown".equals(eventType);
+ boolean isClick = "click".equals(eventType);
int row = tr.getSectionRowIndex();
if ("mouseover".equals(eventType)) {
// Unstyle the old row if it is still part of the table.
@@ -941,7 +940,7 @@
setRowStyleName(hoveringRow, style.cellTableHoveredRow(),
style.cellTableHoveredRowCell(), false);
hoveringRow = null;
- } else if (isMouseDown
+ } else if (isClick
&& ((getPresenter().getKeyboardSelectedRowInView() != row)
|| (keyboardSelectedColumn != col))) {
// Move keyboard focus. Since the user clicked, allow focus to go
to a
@@ -960,7 +959,7 @@
return;
}
T value = getDisplayedItem(row);
- if ("click".equals(eventType) && !handlesSelection) {
+ if (isClick && !handlesSelection) {
doSelection(event, value, row, col);
}
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors