]> source.dussan.org Git - vaadin-framework.git/commitdiff
Merge of properly focus clicked input element in Webkit (#11854, #11297)
authorArtur Signell <artur@vaadin.com>
Wed, 5 Jun 2013 08:06:17 +0000 (11:06 +0300)
committerVaadin Code Review <review@vaadin.com>
Wed, 5 Jun 2013 08:55:12 +0000 (08:55 +0000)
Change-Id: I4c313b55966bcbcd31a40bdd0bf561e887822e51

client/src/com/vaadin/client/ui/VCheckBox.java
client/src/com/vaadin/client/ui/VNativeButton.java
client/src/com/vaadin/client/ui/VOptionGroup.java
uitest/src/com/vaadin/tests/components/abstractfield/FieldFocusOnClick.java [new file with mode: 0644]

index ca1e3ebcdbb4747b6f2a6ee0a23ec0ece92f8e1a..166e9acbb4a4e64aee97187e0cf83e50296adbaf 100644 (file)
 
 package com.vaadin.client.ui;
 
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Element;
 import com.google.gwt.user.client.Event;
 import com.vaadin.client.ApplicationConnection;
+import com.vaadin.client.BrowserInfo;
 import com.vaadin.client.Util;
 import com.vaadin.client.VTooltip;
 
@@ -52,6 +55,17 @@ public class VCheckBox extends com.google.gwt.user.client.ui.CheckBox implements
                     (DOM.getEventsSunk(el) | VTooltip.TOOLTIP_EVENTS));
             el = DOM.getNextSibling(el);
         }
+
+        if (BrowserInfo.get().isWebkit()) {
+            // Webkit does not focus non-text input elements on click
+            // (#11854)
+            addClickHandler(new ClickHandler() {
+                @Override
+                public void onClick(ClickEvent event) {
+                    setFocus(true);
+                }
+            });
+        }
     }
 
     @Override
index 6e1c5bae770a90d40f2f3cb195feeefc9a49a138..67fa6f2ee306e4cc5076c6ae383933b5b8028242 100644 (file)
 
 package com.vaadin.client.ui;
 
-import com.google.gwt.core.client.Scheduler;
-import com.google.gwt.core.client.Scheduler.ScheduledCommand;
-import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Element;
-import com.google.gwt.dom.client.NativeEvent;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.event.dom.client.MouseEvent;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.Button;
@@ -31,7 +26,6 @@ import com.vaadin.client.ApplicationConnection;
 import com.vaadin.client.BrowserInfo;
 import com.vaadin.client.MouseEventDetailsBuilder;
 import com.vaadin.client.Util;
-import com.vaadin.client.VConsole;
 import com.vaadin.shared.MouseEventDetails;
 import com.vaadin.shared.ui.button.ButtonServerRpc;
 
@@ -149,8 +143,10 @@ public class VNativeButton extends Button implements ClickHandler {
             return;
         }
 
-        if (BrowserInfo.get().isSafari()) {
-            VNativeButton.this.setFocus(true);
+        if (BrowserInfo.get().isWebkit()) {
+            // Webkit does not focus non-text input elements on click
+            // (#11854)
+            setFocus(true);
         }
         if (disableOnClick) {
             setEnabled(false);
index 2ba8a9e7291060de36d54bb24536bc91a30dd21a..ca1f19303d334b3e7e2640930761047f75d0b9c5 100644 (file)
@@ -40,6 +40,7 @@ import com.google.gwt.user.client.ui.Panel;
 import com.google.gwt.user.client.ui.RadioButton;
 import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.client.ApplicationConnection;
+import com.vaadin.client.BrowserInfo;
 import com.vaadin.client.UIDL;
 import com.vaadin.client.Util;
 import com.vaadin.shared.EventId;
@@ -153,8 +154,16 @@ public class VOptionGroup extends VOptionGroupBase implements FocusHandler,
     public void onClick(ClickEvent event) {
         super.onClick(event);
         if (event.getSource() instanceof CheckBox) {
-            final boolean selected = ((CheckBox) event.getSource()).getValue();
-            final String key = optionsToKeys.get(event.getSource());
+            CheckBox source = (CheckBox) event.getSource();
+
+            if (BrowserInfo.get().isWebkit()) {
+                // Webkit does not focus non-text input elements on click
+                // (#11854)
+                source.setFocus(true);
+            }
+
+            final boolean selected = source.getValue();
+            final String key = optionsToKeys.get(source);
             if (!isMultiselect()) {
                 selectedKeys.clear();
             }
diff --git a/uitest/src/com/vaadin/tests/components/abstractfield/FieldFocusOnClick.java b/uitest/src/com/vaadin/tests/components/abstractfield/FieldFocusOnClick.java
new file mode 100644 (file)
index 0000000..30b6a3a
--- /dev/null
@@ -0,0 +1,32 @@
+package com.vaadin.tests.components.abstractfield;\r
+\r
+import java.util.Arrays;\r
+\r
+import com.vaadin.server.VaadinRequest;\r
+import com.vaadin.tests.components.AbstractTestUI;\r
+import com.vaadin.ui.CheckBox;\r
+import com.vaadin.ui.NativeButton;\r
+import com.vaadin.ui.OptionGroup;\r
+import com.vaadin.ui.TextField;\r
+\r
+public class FieldFocusOnClick extends AbstractTestUI {\r
+\r
+    @Override\r
+    protected void setup(VaadinRequest request) {\r
+        addComponent(new TextField(null, "TextField"));\r
+        addComponent(new CheckBox("CheckBox"));\r
+        addComponent(new OptionGroup(null,\r
+                Arrays.asList("Option 1", "Option 2")));\r
+        addComponent(new NativeButton("NativeButton"));\r
+    }\r
+\r
+    @Override\r
+    protected String getTestDescription() {\r
+        return "Webkit doesn't focus non-text input elements when clicked";\r
+    }\r
+\r
+    @Override\r
+    protected Integer getTicketNumber() {\r
+        return 11854;\r
+    }\r
+}
\ No newline at end of file