From: Matti Tahvonen Date: Mon, 28 Dec 2009 13:32:38 +0000 (+0000) Subject: fixes #3901, checkbox focus outline now visible IE6 and IE7 when checkbox has no... X-Git-Tag: 6.7.0.beta1~2084^2~18 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=f96b570c18e8c9dc915a8a4ab6e96f100eb644d8;p=vaadin-framework.git fixes #3901, checkbox focus outline now visible IE6 and IE7 when checkbox has no caption svn changeset:10556/svn branch:6.2 --- diff --git a/src/com/vaadin/terminal/gwt/client/ui/VCheckBox.java b/src/com/vaadin/terminal/gwt/client/ui/VCheckBox.java index 3bd6f656f2..389c2210d3 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VCheckBox.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VCheckBox.java @@ -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 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)