The shim iframe causes crashes in IE6 and does not really help in Opera/Safari/Firefox.
svn changeset:24146/svn branch:6.8
--- /dev/null
+<html>
+<body>
+ <applet code="com/vaadin/tests/components/embedded/TestApplet/class"></applet>
+</body>
+</html>
\ No newline at end of file
}
private IFrameElement getShimElement() {
- if (shimElement == null) {
+ if (shimElement == null && useShimIframe()) {
shimElement = Document.get().createIFrameElement();
// Insert shim iframe before the main overlay element. It does not
DOM.setStyleAttribute(shadow, "display", progress < 0.9 ? "none"
: "");
}
- updatePositionAndSize((Element) Element.as(getShimElement()),
- positionAndSize);
+ if (useShimIframe()) {
+ updatePositionAndSize((Element) Element.as(getShimElement()),
+ positionAndSize);
+ }
// Opera fix, part 2 (ticket #2704)
if (BrowserInfo.get().isOpera() && isShadowEnabled()) {
RootPanel.get().getElement().insertBefore(shadow, getElement());
sinkShadowEvents();
}
- if (!isShimAttached()) {
+ if (useShimIframe() && !isShimAttached()) {
RootPanel.get().getElement()
.insertBefore(shimElement, getElement());
}
}
+ /**
+ * Returns true if we should add a shim iframe below the overlay to deal
+ * with zindex issues with PDFs and applets. Can be overriden to disable
+ * shim iframes if they are not needed.
+ *
+ * @return true if a shim iframe should be added, false otherwise
+ */
+ protected boolean useShimIframe() {
+ BrowserInfo info = BrowserInfo.get();
+ return info.isIE() && info.isBrowserVersionNewerOrEqual(8, 0);
+ }
+
private void updatePositionAndSize(Element e,
PositionAndSize positionAndSize) {
e.getStyle().setLeft(positionAndSize.getLeft(), Unit.PX);
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>EmbeddedClickListenerRelativeCoordinates</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">EmbeddedClickListenerRelativeCoordinates</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.embedded.EmbeddedApplet?restartApplication</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>with-applet</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>vaadin=runcomvaadintestscomponentsembeddedEmbeddedApplet::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[1]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>without-applet</td>
+</tr>
+</tbody></table>
+</body>
+</html>
--- /dev/null
+package com.vaadin.tests.components.embedded;
+
+import com.vaadin.terminal.ExternalResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Embedded;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Window;
+
+public class EmbeddedApplet extends TestBase {
+
+ @Override
+ protected String getDescription() {
+ return "The sub window should be shown on top of the embedded applet";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 8399;
+ }
+
+ @Override
+ public void setup() {
+ final Embedded applet = new Embedded();
+ applet.setType(Embedded.TYPE_BROWSER);
+ applet.setWidth("400px");
+ applet.setHeight("300px");
+ applet.setSource(new ExternalResource("/statictestfiles/applet.html"));
+ addComponent(applet);
+
+ addComponent(new Button("Remove applet", new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ removeComponent(applet);
+ }
+ }));
+
+ Window window = new Window("Testwindow");
+ window.addComponent(new Label("I am inside the window"));
+ applet.getWindow().addWindow(window);
+ }
+}
--- /dev/null
+package com.vaadin.tests.components.embedded;
+
+import java.applet.Applet;
+import java.awt.Graphics;
+
+public class TestApplet extends Applet {
+ @Override
+ public void paint(Graphics g) {
+ g.drawString("Hello, I am an applet! Look at me!", 10, 20);
+ }
+}