From: Marc Englund Date: Fri, 6 Jun 2008 09:25:41 +0000 (+0000) Subject: Resizing and moving does no longer loose event to iframes and such. X-Git-Tag: 6.7.0.beta1~4651 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=52db505d1cf11abc96b1560febcbdccb02ddb152;p=vaadin-framework.git Resizing and moving does no longer loose event to iframes and such. Fixes #1765 svn changeset:4772/svn branch:trunk --- diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IWindow.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IWindow.java index 05d823d6e6..d3fef82484 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IWindow.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IWindow.java @@ -96,6 +96,7 @@ public class IWindow extends PopupPanel implements Paintable, ScrollListener { private boolean modal = false; private Element modalityCurtain; + private Element draggingCurtain; private Element headerText; @@ -417,6 +418,31 @@ public class IWindow extends PopupPanel implements Paintable, ScrollListener { DOM.removeChild(RootPanel.getBodyElement(), modalityCurtain); } + /* + * Shows (or hides) an empty div on top of all other content; used when + * resizing or moving, so that iframes (etc) do not steal event. + */ + private void showDraggingCurtain(boolean show) { + if (show && draggingCurtain == null) { + ApplicationConnection.getConsole().log("SHOW"); + draggingCurtain = DOM.createDiv(); + DOM.setStyleAttribute(draggingCurtain, "position", "absolute"); + DOM.setStyleAttribute(draggingCurtain, "top", "0px"); + DOM.setStyleAttribute(draggingCurtain, "left", "0px"); + DOM.setStyleAttribute(draggingCurtain, "width", "100%"); + DOM.setStyleAttribute(draggingCurtain, "height", "100%"); + DOM.setStyleAttribute(draggingCurtain, "zIndex", "" + + ToolkitOverlay.Z_INDEX); + + DOM.appendChild(RootPanel.getBodyElement(), draggingCurtain); + } else if (!show && draggingCurtain != null) { + ApplicationConnection.getConsole().log("HIDE"); + DOM.removeChild(RootPanel.getBodyElement(), draggingCurtain); + draggingCurtain = null; + } + + } + public void setPopupPosition(int left, int top) { super.setPopupPosition(left, top); if (left != uidlPositionX && client != null) { @@ -472,6 +498,7 @@ public class IWindow extends PopupPanel implements Paintable, ScrollListener { if (!isActive()) { bringToFront(); } + showDraggingCurtain(true); resizing = true; startX = DOM.eventGetScreenX(event); startY = DOM.eventGetScreenY(event); @@ -481,11 +508,13 @@ public class IWindow extends PopupPanel implements Paintable, ScrollListener { DOM.eventPreventDefault(event); break; case Event.ONMOUSEUP: + showDraggingCurtain(false); resizing = false; DOM.releaseCapture(getElement()); setSize(event, true); break; case Event.ONLOSECAPTURE: + showDraggingCurtain(false); resizing = false; case Event.ONMOUSEMOVE: if (resizing) { @@ -537,6 +566,7 @@ public class IWindow extends PopupPanel implements Paintable, ScrollListener { if (!isActive()) { bringToFront(); } + showDraggingCurtain(true); dragging = true; startX = DOM.eventGetScreenX(event); startY = DOM.eventGetScreenY(event); @@ -547,9 +577,11 @@ public class IWindow extends PopupPanel implements Paintable, ScrollListener { break; case Event.ONMOUSEUP: dragging = false; + showDraggingCurtain(false); DOM.releaseCapture(getElement()); break; case Event.ONLOSECAPTURE: + showDraggingCurtain(false); dragging = false; break; case Event.ONMOUSEMOVE: