]> source.dussan.org Git - vaadin-framework.git/commitdiff
fixes #3901, checkbox focus outline now visible IE6 and IE7 when checkbox has no...
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Mon, 28 Dec 2009 13:32:38 +0000 (13:32 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Mon, 28 Dec 2009 13:32:38 +0000 (13:32 +0000)
svn changeset:10556/svn branch:6.2

src/com/vaadin/terminal/gwt/client/ui/VCheckBox.java

index 3bd6f656f26a8e3067d7b9abc36353472ed1e3d1..389c2210d3717cdf5a233a74c1ce9f5bae4d0534 100644 (file)
@@ -4,12 +4,17 @@
 
 package com.vaadin.terminal.gwt.client.ui;
 
+import com.google.gwt.dom.client.InputElement;
+import com.google.gwt.dom.client.LabelElement;
+import com.google.gwt.dom.client.Node;
+import com.google.gwt.dom.client.NodeList;
 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.terminal.gwt.client.ApplicationConnection;
+import com.vaadin.terminal.gwt.client.BrowserInfo;
 import com.vaadin.terminal.gwt.client.Paintable;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.Util;
@@ -101,6 +106,36 @@ public class VCheckBox extends com.google.gwt.user.client.ui.CheckBox implements
         immediate = uidl.getBooleanAttribute("immediate");
     }
 
+    @Override
+    public void setText(String text) {
+        super.setText(text);
+        if (BrowserInfo.get().isIE() && BrowserInfo.get().getIEVersion() < 8) {
+
+            boolean breakLink = text == null || "".equals(text);
+
+            // break or create link between label element and checkbox, to
+            // enable native focus outline around checkbox element itself, if
+            // caption is not present
+            NodeList<Node> childNodes = getElement().getChildNodes();
+            String id = null;
+            for (int i = 0; i < childNodes.getLength(); i++) {
+                Node item = childNodes.getItem(i);
+                if (item.getNodeName().toLowerCase().equals("input")) {
+                    InputElement input = (InputElement) item;
+                    id = input.getId();
+                }
+                if (item.getNodeName().toLowerCase().equals("label")) {
+                    LabelElement label = (LabelElement) item;
+                    if (breakLink) {
+                        label.setHtmlFor("");
+                    } else {
+                        label.setHtmlFor(id);
+                    }
+                }
+            }
+        }
+    }
+
     @Override
     public void onBrowserEvent(Event event) {
         if (icon != null && (event.getTypeInt() == Event.ONCLICK)