import java.util.Map;
import java.util.Set;
+import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Document;
*
* @param el
* IMG element
- * @param blankImageUrl
- * URL to transparent one-pixel gif
*/
- public native static void addPngFix(Element el, String blankImageUrl)
+ public native static void addPngFix(Element el)
/*-{
el.attachEvent("onload", function() {
- @com.vaadin.terminal.gwt.client.Util::doPngFix(Lcom/google/gwt/user/client/Element;Ljava/lang/String;)(el,blankImageUrl);
+ @com.vaadin.terminal.gwt.client.Util::doIE6PngFix(Lcom/google/gwt/user/client/Element;)(el);
},false);
}-*/;
- public native static void doPngFix(Element el, String blankImageUrl)
+ private native static void doPngFix(Element el, String blankImageUrl)
/*-{
var src = el.src;
if (src.indexOf(".png") < 1) return;
el.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"', sizingMethod='crop')";
}-*/;
- public static void doIE6PngFix(Element el, ApplicationConnection ac) {
- String blankImageUrl = ac.getThemeUri()
- + "/../runo/common/img/blank.gif";
- doPngFix(el, blankImageUrl);
+ public static void doIE6PngFix(Element el) {
+ String blankImageUrl = GWT.getModuleBaseURL() + "ie6pngfix/blank.gif";
+ String src = el.getAttribute("src");
+ if (src != null && !src.equals(blankImageUrl)) {
+ doPngFix(el, blankImageUrl);
+ }
}
/**
// Handle onload events (icon loaded, size changes)
if (DOM.eventGetType(e) == Event.ONLOAD) {
if (BrowserInfo.get().isIE6()) {
- Util.doIE6PngFix((Element) Element.as(e.getEventTarget()),
- client);
+ Util.doIE6PngFix((Element) Element.as(e.getEventTarget()));
}
VMenuBar parent = getParentMenu();
if (parent != null) {
sinkEvents(VTooltip.TOOLTIP_EVENTS);
- // Sink the onload event for an icon (if it exists). The onload
+ // Sink the onload event for any icons. The onload
// events are handled by the parent VMenuBar.
NodeList<com.google.gwt.dom.client.Element> imgElements = getElement()
.getElementsByTagName("img");
} else {
widthAvailable = diff;
}
+
+ if (BrowserInfo.get().isIE6()) {
+ /*
+ * Handle transparency for IE6 here as we cannot
+ * implement it in CustomMenuItem.onAttach because
+ * onAttach is never called for CustomMenuItem due to an
+ * invalid component hierarchy (#6203)...
+ */
+ reloadImages();
+ }
}
}
if (collapsedRootItems.getItems().size() > 0) {
}
return null;
}
+
+ @Override
+ protected void onLoad() {
+ super.onLoad();
+ if (BrowserInfo.get().isIE6()) {
+ reloadImages();
+ }
+ }
+
+ /**
+ * Force a new onload event for all images. Used only for IE6 to deal with
+ * PNG transparency.
+ */
+ private void reloadImages() {
+
+ NodeList<com.google.gwt.dom.client.Element> imgElements = getElement()
+ .getElementsByTagName("img");
+ for (int i = 0; i < imgElements.getLength(); i++) {
+ Element e = (Element) imgElements.getItem(i);
+
+ // IE6 fires onload events for the icons before the listener
+ // is attached (or never). Updating the src force another
+ // onload event
+ e.setAttribute("src", e.getAttribute("src"));
+ }
+ }
+
}