The same problem is still present in the CellTree.

On 13 nov, 00:03, [email protected] wrote:
> 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 athttp://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

Reply via email to