]> source.dussan.org Git - vaadin-framework.git/commitdiff
Merged fix for #3699 from 6.3 to 6.4
authorJohn Alhroos <john.ahlroos@itmill.com>
Tue, 1 Jun 2010 08:06:21 +0000 (08:06 +0000)
committerJohn Alhroos <john.ahlroos@itmill.com>
Tue, 1 Jun 2010 08:06:21 +0000 (08:06 +0000)
svn changeset:13454/svn branch:6.4

1  2 
src/com/vaadin/terminal/gwt/client/ui/VTwinColSelect.java

index 55acabb07ddd5ea481b4a83402003a73329b164b,a4d53ed837199b1be244fa50f5047d77558628d2..089c61080fb827c10c2c121b17a3bb061a4a1165
@@@ -8,17 -8,17 +8,19 @@@ import java.util.ArrayList
  import java.util.Iterator;\r
  \r
  import com.google.gwt.event.dom.client.ClickEvent;\r
 +import com.google.gwt.event.dom.client.KeyCodes;\r
 +import com.google.gwt.event.dom.client.KeyDownEvent;\r
 +import com.google.gwt.event.dom.client.KeyDownHandler;\r
+ import com.google.gwt.event.dom.client.MouseDownEvent;\r
+ import com.google.gwt.event.dom.client.MouseDownHandler;\r
  import com.google.gwt.user.client.DOM;\r
  import com.google.gwt.user.client.ui.FlowPanel;\r
  import com.google.gwt.user.client.ui.HTML;\r
  import com.google.gwt.user.client.ui.ListBox;\r
  import com.google.gwt.user.client.ui.Panel;\r
  import com.vaadin.terminal.gwt.client.UIDL;\r
--\r
- public class VTwinColSelect extends VOptionGroupBase implements KeyDownHandler {\r
 -public class VTwinColSelect extends VOptionGroupBase implements\r
 -        MouseDownHandler {\r
++
++public class VTwinColSelect extends VOptionGroupBase implements KeyDownHandler, MouseDownHandler {\r
  \r
      private static final String CLASSNAME = "v-select-twincol";\r
  \r
          buttons.add(remove);\r
          panel.add(buttons);\r
          panel.add(selections);\r
--\r
++
 +        options.addKeyDownHandler(this);\r
-         selections.addKeyDownHandler(this);\r
+         options.addMouseDownHandler(this);\r
++\r
+         selections.addMouseDownHandler(this);\r
++        selections.addKeyDownHandler(this);
      }\r
  \r
      @Override\r
  \r
      public void focus() {\r
          options.setFocus(true);\r
-     }\r
++    }
 +\r
 +    /**\r
 +     * Get the key that selects an item in the table. By default it is the Enter\r
 +     * key but by overriding this you can change the key to whatever you want.\r
 +     *\r
 +     * @return\r
 +     */\r
 +    protected int getNavigationSelectKey() {\r
 +        return KeyCodes.KEY_ENTER;\r
 +    }\r
 +\r
 +    /*\r
 +     * (non-Javadoc)\r
 +     *\r
 +     * @see\r
 +     * com.google.gwt.event.dom.client.KeyDownHandler#onKeyDown(com.google.gwt\r
 +     * .event.dom.client.KeyDownEvent)\r
 +     */\r
 +    public void onKeyDown(KeyDownEvent event) {\r
 +        int keycode = event.getNativeKeyCode();\r
 +\r
 +        // Catch tab and move between select:s\r
 +        if (keycode == KeyCodes.KEY_TAB && event.getSource() == options) {\r
 +            // Prevent default behavior\r
 +            event.preventDefault();\r
 +\r
 +            // Remove current selections\r
 +            for (int i = 0; i < options.getItemCount(); i++) {\r
 +                options.setItemSelected(i, false);\r
 +            }\r
 +\r
 +            // Focus selections\r
 +            selections.setFocus(true);\r
 +        }\r
 +\r
 +        if (keycode == KeyCodes.KEY_TAB && event.isShiftKeyDown()\r
 +                && event.getSource() == selections) {\r
 +            // Prevent default behavior\r
 +            event.preventDefault();\r
 +\r
 +            // Remove current selections\r
 +            for (int i = 0; i < selections.getItemCount(); i++) {\r
 +                selections.setItemSelected(i, false);\r
 +            }\r
 +\r
 +            // Focus options\r
 +            options.setFocus(true);\r
 +        }\r
 +\r
 +        if (keycode == getNavigationSelectKey()) {\r
 +            // Prevent default behavior\r
 +            event.preventDefault();\r
 +\r
 +            // Decide which select the selection was made in\r
 +            if (event.getSource() == options) {\r
 +                // Prevents the selection to become a single selection when\r
 +                // using Enter key\r
 +                // as the selection key (default)\r
 +                options.setFocus(false);\r
 +\r
 +                addItem();\r
 +\r
 +            } else if (event.getSource() == selections) {\r
 +                // Prevents the selection to become a single selection when\r
 +                // using Enter key\r
 +                // as the selection key (default)\r
 +                selections.setFocus(false);\r
 +\r
 +                removeItem();\r
 +            }\r
 +        }\r
 +\r
      }\r
  \r
 -    }\r
+     /*\r
+      * (non-Javadoc)\r
+      *\r
+      * @see\r
+      * com.google.gwt.event.dom.client.MouseDownHandler#onMouseDown(com.google\r
+      * .gwt.event.dom.client.MouseDownEvent)\r
+      */\r
+     public void onMouseDown(MouseDownEvent event) {\r
+         // Ensure that items are deselected when selecting\r
+         // from a different source. See #3699 for details.\r
+         if (event.getSource() == options) {\r
+             for (int i = 0; i < selections.getItemCount(); i++) {\r
+                 selections.setItemSelected(i, false);\r
+             }\r
+         } else if (event.getSource() == selections) {\r
+             for (int i = 0; i < options.getItemCount(); i++) {\r
+                 options.setItemSelected(i, false);\r
+             }\r
+         }\r
\r
++    }
  }\r