]> source.dussan.org Git - vaadin-framework.git/commitdiff
Restricted sub window move and resize to when cursor is inside browser content area...
authorArtur Signell <artur.signell@itmill.com>
Sun, 15 Nov 2009 14:52:43 +0000 (14:52 +0000)
committerArtur Signell <artur.signell@itmill.com>
Sun, 15 Nov 2009 14:52:43 +0000 (14:52 +0000)
svn changeset:9798/svn branch:6.2

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

index 119ea9d88c6f06c5dc77ef21c187d80c500a6255..a2a64dcf5a09d4d212e7c088d77ca2e96474cfd2 100644 (file)
@@ -521,10 +521,12 @@ public class VWindow extends VOverlay implements Container, ScrollListener {
 
         contentAreaBorderPadding = Util.measureHorizontalPaddingAndBorder(
                 contents, 4);
-        int wrapperPaddingBorder = Util.measureHorizontalPaddingAndBorder(wrapper, 0)
+        int wrapperPaddingBorder = Util.measureHorizontalPaddingAndBorder(
+                wrapper, 0)
                 + Util.measureHorizontalPaddingAndBorder(wrapper2, 0);
 
-        contentAreaToRootDifference = wrapperPaddingBorder + contentAreaBorderPadding;
+        contentAreaToRootDifference = wrapperPaddingBorder
+                + contentAreaBorderPadding;
 
     }
 
@@ -807,7 +809,37 @@ public class VWindow extends VOverlay implements Container, ScrollListener {
         }
     }
 
+    /**
+     * Checks if the cursor was inside the browser content area when the event
+     * happened.
+     * 
+     * @param event
+     *            The event to be checked
+     * @return true, if the cursor is inside the browser content area
+     * 
+     *         false, otherwise
+     */
+    private boolean cursorInsideBrowserContentArea(Event event) {
+        if (event.getClientX() < 0 || event.getClientY() < 0) {
+            // Outside to the left or above
+            return false;
+        }
+
+        if (event.getClientX() > Window.getClientWidth()
+                || event.getClientY() > Window.getClientHeight()) {
+            // Outside to the right or below
+            return false;
+        }
+
+        return true;
+    }
+
     private void setSize(Event event, boolean updateVariables) {
+        if (!cursorInsideBrowserContentArea(event)) {
+            // Only drag while cursor is inside the browser client area
+            return;
+        }
+
         int w = event.getScreenX() - startX + origW;
         if (w < MIN_CONTENT_AREA_WIDTH + getContentAreaToRootDifference()) {
             w = MIN_CONTENT_AREA_WIDTH + getContentAreaToRootDifference();
@@ -961,9 +993,12 @@ public class VWindow extends VOverlay implements Container, ScrollListener {
         case Event.ONMOUSEMOVE:
             if (dragging) {
                 centered = false;
-                final int x = DOM.eventGetScreenX(event) - startX + origX;
-                final int y = DOM.eventGetScreenY(event) - startY + origY;
-                setPopupPosition(x, y);
+                if (cursorInsideBrowserContentArea(event)) {
+                    // Only drag while cursor is inside the browser client area
+                    final int x = DOM.eventGetScreenX(event) - startX + origX;
+                    final int y = DOM.eventGetScreenY(event) - startY + origY;
+                    setPopupPosition(x, y);
+                }
                 DOM.eventPreventDefault(event);
             }
             break;