You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2009/09/02 16:45:37 UTC

svn commit: r810533 - in /incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk: Dialog.java Sheet.java Window.java skin/WindowSkin.java skin/terra/TerraDialogSkin.java skin/terra/TerraFileBrowserSheetSkin.java skin/terra/TerraSheetSkin.java

Author: gbrown
Date: Wed Sep  2 14:45:36 2009
New Revision: 810533

URL: http://svn.apache.org/viewvc?rev=810533&view=rev
Log:
Initial work towards resolving PIVOT-265: 

Modified:
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Dialog.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Sheet.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Window.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraDialogSkin.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSheetSkin.java

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Dialog.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Dialog.java?rev=810533&r1=810532&r2=810533&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Dialog.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Dialog.java Wed Sep  2 14:45:36 2009
@@ -52,7 +52,6 @@
 
     private boolean modal = false;
     private DialogCloseListener dialogCloseListener = null;
-    private Window disabledOwner = null;
     private boolean result = false;
 
     private DialogStateListenerList dialogStateListeners = new DialogStateListenerList();
@@ -151,36 +150,6 @@
         if (isOpen()) {
             this.dialogCloseListener = dialogCloseListener;
             this.modal = modal;
-
-            if (modal) {
-                if (!owner.isEnabled()) {
-                    throw new IllegalStateException("Owner is already disabled.");
-                }
-
-                // Walk owner tree to find the nearest enabled owning ancestor
-                // and disable it
-                Window disabledOwner = null;
-
-                while (owner != null
-                    && owner.isEnabled()) {
-                    disabledOwner = owner;
-                    owner = owner.getOwner();
-                }
-
-                // Disable the ancestor and maintain a reference to it so we can
-                // enable it when this dialog is closed
-                if (disabledOwner != null) {
-                    disabledOwner.setEnabled(false);
-                }
-
-                this.disabledOwner = disabledOwner;
-
-                // Disabling the owner tree also disabled this dialog; re-enable it
-                // and make it the active window
-                setEnabled(true);
-                requestActive();
-                restoreFocus();
-            }
         }
     }
 
@@ -199,19 +168,12 @@
                 if (isClosed()) {
                     this.result = result;
 
-                    // Enable the ancestor that was disabled when this dialog
-                    // was opened
-                    if (disabledOwner != null) {
-                        disabledOwner.setEnabled(true);
-
-                        // Move the owner to the front
-                        if (modal) {
-                            disabledOwner.moveToFront();
-                        }
+                    Window owner = getOwner();
+                    if (owner.isOpen()) {
+                        owner.moveToFront();
                     }
 
                     modal = false;
-                    disabledOwner = null;
 
                     // Notify listeners
                     if (dialogCloseListener != null) {
@@ -235,10 +197,6 @@
         return dialogCloseListener;
     }
 
-    public Window getDisabledOwner() {
-        return disabledOwner;
-    }
-
     public boolean getResult() {
         return result;
     }

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Sheet.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Sheet.java?rev=810533&r1=810532&r2=810533&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Sheet.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Sheet.java Wed Sep  2 14:45:36 2009
@@ -52,25 +52,6 @@
     private boolean result = false;
     private SheetCloseListener sheetCloseListener = null;
 
-    private ComponentMouseButtonListener ownerMouseButtonListener =
-        new ComponentMouseButtonListener.Adapter() {
-        @Override
-        public boolean mouseDown(Component component, Mouse.Button button, int x, int y) {
-            Window owner = (Window)component;
-            Component ownerContent = owner.getContent();
-
-            if (ownerContent != null
-                && !ownerContent.isEnabled()
-                && owner.getComponentAt(x, y) == ownerContent) {
-                ApplicationContext.beep();
-
-                moveToFront();
-            }
-
-            return false;
-        }
-    };
-
     private SheetStateListenerList sheetStateListeners = new SheetStateListenerList();
 
     /**
@@ -113,17 +94,6 @@
         }
 
         super.open(display);
-
-        if (isOpen()) {
-            Component content = owner.getContent();
-            if (!content.isEnabled()) {
-                throw new IllegalStateException("Owner content is already disabled.");
-            }
-
-            content.setEnabled(false);
-
-            owner.getComponentMouseButtonListeners().add(ownerMouseButtonListener);
-        }
     }
 
     @Override
@@ -155,11 +125,6 @@
                     this.result = result;
 
                     Window owner = getOwner();
-                    owner.getComponentMouseButtonListeners().remove(ownerMouseButtonListener);
-
-                    Component content = owner.getContent();
-                    content.setEnabled(true);
-
                     if (owner.isOpen()) {
                         owner.moveToFront();
                     }

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Window.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Window.java?rev=810533&r1=810532&r2=810533&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Window.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Window.java Wed Sep  2 14:45:36 2009
@@ -966,11 +966,13 @@
                     window = window.owner;
                 }
             } else {
-                // Activate the window
+                // Activate/restore the window
                 if (window.isShowing()
-                    && window.isEnabled()
-                    && !window.isAuxilliary()) {
-                    setActiveWindow(window);
+                    && window.isEnabled()) {
+                    if (!window.isAuxilliary()) {
+                        setActiveWindow(window);
+                    }
+
                     window.restoreFocus();
                 }
 
@@ -1104,26 +1106,6 @@
     }
 
     @Override
-    protected boolean mouseDown(Mouse.Button button, int x, int y) {
-        // NOTE This is done here rather than in WindowSkin because the
-        // user input methods are not called on the skin when the component
-        // is disabled
-
-        if (isEnabled()) {
-            // Bring this window to the front
-            moveToFront();
-        } else {
-            ApplicationContext.beep();
-
-            // Bring the window's owner tree to the front
-            Window rootOwner = getRootOwner();
-            rootOwner.moveToFront();
-        }
-
-        return super.mouseDown(button, x, y);
-    }
-
-    @Override
     public boolean keyReleased(int keyCode, Keyboard.KeyLocation keyLocation) {
         boolean consumed = super.keyReleased(keyCode, keyLocation);
 

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java?rev=810533&r1=810532&r2=810533&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/WindowSkin.java Wed Sep  2 14:45:36 2009
@@ -25,6 +25,7 @@
 import org.apache.pivot.wtk.Direction;
 import org.apache.pivot.wtk.Display;
 import org.apache.pivot.wtk.FocusTraversalPolicy;
+import org.apache.pivot.wtk.Mouse;
 import org.apache.pivot.wtk.Window;
 import org.apache.pivot.wtk.WindowListener;
 import org.apache.pivot.wtk.WindowStateListener;
@@ -118,6 +119,16 @@
         }
     }
 
+    @Override
+    public boolean mouseDown(Component component, Mouse.Button button, int x, int y) {
+        boolean consumed = super.mouseDown(component, button, x, y);
+
+        Window window = (Window)component;
+        window.moveToFront();
+
+        return consumed;
+    }
+
     // Window events
     @Override
     public void titleChanged(Window window, String previousTitle) {

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraDialogSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraDialogSkin.java?rev=810533&r1=810532&r2=810533&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraDialogSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraDialogSkin.java Wed Sep  2 14:45:36 2009
@@ -20,12 +20,14 @@
 import org.apache.pivot.wtk.ApplicationContext;
 import org.apache.pivot.wtk.Component;
 import org.apache.pivot.wtk.Container;
+import org.apache.pivot.wtk.ContainerMouseListener;
 import org.apache.pivot.wtk.Dialog;
 import org.apache.pivot.wtk.DialogStateListener;
+import org.apache.pivot.wtk.Display;
 import org.apache.pivot.wtk.Keyboard;
+import org.apache.pivot.wtk.Mouse;
 import org.apache.pivot.wtk.Window;
 
-
 /**
  * Dialog skin.
  */
@@ -51,6 +53,33 @@
         }
     }
 
+    private ContainerMouseListener displayMouseListener = new ContainerMouseListener.Adapter() {
+        public boolean mouseDown(Container container, Mouse.Button button, int x, int y) {
+            boolean consumed = false;
+
+            Dialog dialog = (Dialog)getComponent();
+
+            if (dialog.isModal()) {
+                Display display = (Display)container;
+                Component descendant = display.getDescendantAt(x, y);
+
+                if (descendant != display) {
+                    Window window = descendant.getWindow();
+
+                    if (window.isOwner(dialog)) {
+                        ApplicationContext.beep();
+                        window = window.getRootOwner();
+                        window.moveToFront();
+
+                        consumed = true;
+                    }
+                }
+            }
+
+            return consumed;
+        }
+    };
+
     @Override
     public void install(Component component) {
         super.install(component);
@@ -93,9 +122,19 @@
     public void windowOpened(Window window) {
         super.windowOpened(window);
 
+        Display display = window.getDisplay();
+        display.getContainerMouseListeners().add(displayMouseListener);
+
         ApplicationContext.queueCallback(new RepositionCallback());
     }
 
+    @Override
+    public void windowClosed(Window window, Display display) {
+        super.windowClosed(window, display);
+
+        display.getContainerMouseListeners().remove(displayMouseListener);
+    }
+
     public Vote previewDialogClose(Dialog dialog, boolean result) {
         return Vote.APPROVE;
     }

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java?rev=810533&r1=810532&r2=810533&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraFileBrowserSheetSkin.java Wed Sep  2 14:45:36 2009
@@ -262,7 +262,9 @@
     public void windowOpened(Window window) {
         super.windowOpened(window);
 
-        window.requestFocus();
+        if (window.isOpen()) {
+            window.requestFocus();
+        }
     }
 
     @Override

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSheetSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSheetSkin.java?rev=810533&r1=810532&r2=810533&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSheetSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSheetSkin.java Wed Sep  2 14:45:36 2009
@@ -21,12 +21,17 @@
 
 import org.apache.pivot.collections.Dictionary;
 import org.apache.pivot.util.Vote;
+import org.apache.pivot.wtk.ApplicationContext;
 import org.apache.pivot.wtk.Component;
 import org.apache.pivot.wtk.ComponentListener;
+import org.apache.pivot.wtk.Container;
+import org.apache.pivot.wtk.ContainerMouseListener;
 import org.apache.pivot.wtk.Dimensions;
+import org.apache.pivot.wtk.Display;
 import org.apache.pivot.wtk.GraphicsUtilities;
 import org.apache.pivot.wtk.Insets;
 import org.apache.pivot.wtk.Keyboard;
+import org.apache.pivot.wtk.Mouse;
 import org.apache.pivot.wtk.Orientation;
 import org.apache.pivot.wtk.Point;
 import org.apache.pivot.wtk.Sheet;
@@ -64,6 +69,7 @@
     private OpenTransition openTransition = null;
     private Quadratic easing = new Quadratic();
 
+    // TODO Eliminate these and replace with a window component listener
     private ComponentListener ownerComponentListener = new ComponentListener.Adapter() {
         public void locationChanged(Component component, int previousX, int previousY) {
             alignToOwnerContent();
@@ -76,6 +82,32 @@
         }
     };
 
+    private ContainerMouseListener displayMouseListener = new ContainerMouseListener.Adapter() {
+        public boolean mouseDown(Container container, Mouse.Button button, int x, int y) {
+            boolean consumed = false;
+
+            Sheet sheet = (Sheet)getComponent();
+
+            Display display = (Display)container;
+            Component descendant = display.getDescendantAt(x, y);
+
+            if (descendant != display) {
+                Window window = descendant.getWindow();
+
+                if (window.isOwner(sheet)) {
+                    // TODO Block for mouse over the client area only
+
+                    ApplicationContext.beep();
+                    window.moveToFront();
+
+                    consumed = true;
+                }
+            }
+
+            return consumed;
+        }
+    };
+
     private DropShadowDecorator dropShadowDecorator = null;
 
     private static final int TRANSITION_DURATION = 300;
@@ -341,6 +373,9 @@
     public void windowOpened(final Window window) {
         super.windowOpened(window);
 
+        Display display = window.getDisplay();
+        display.getContainerMouseListeners().add(displayMouseListener);
+
         dropShadowDecorator.setShadowOpacity(DropShadowDecorator.DEFAULT_SHADOW_OPACITY);
 
         Window owner = window.getOwner();
@@ -357,6 +392,13 @@
         });
     }
 
+    @Override
+    public void windowClosed(Window window, Display display) {
+        super.windowClosed(window, display);
+
+        display.getContainerMouseListeners().remove(displayMouseListener);
+    }
+
     public Vote previewSheetClose(final Sheet sheet, final boolean result) {
         // Start a close transition, return false, and close the window
         // when the transition is complete