Patch: New interface method PlatformToplevelWindow.setBlocked()

Ralf Heini ralf.heini at aicas.de
Tue Apr 26 07:34:02 PDT 2011


# HG changeset patch
# Parent b80e8e3db13ef54489cc61137b407ba47c187e45
New interface method PlatformToplevelWindow.setBlocked()

diff -r b80e8e3db13e src/share/classes/sun/awt/peer/cacio/CacioComponentPeer.java
--- a/src/share/classes/sun/awt/peer/cacio/CacioComponentPeer.java	Mon Apr 04 14:27:06 2011 +0200
+++ b/src/share/classes/sun/awt/peer/cacio/CacioComponentPeer.java	Mon Apr 04 16:01:00 2011 +0200
@@ -44,6 +44,7 @@
  import java.awt.Rectangle;
  import java.awt.Toolkit;
  import java.awt.Transparency;
+import java.awt.Window;

  import java.awt.event.FocusEvent;
  import java.awt.event.KeyEvent;
@@ -190,12 +191,14 @@

      private void initProxy() {
          if (swingComponent != null) {
-
-            // Setup the proxy window.
-            proxy = new ProxyWindow(this, swingComponent);
-            proxy.setBounds(awtComponent.getX(), awtComponent.getY(),
-                            awtComponent.getWidth(), awtComponent.getHeight());
-            proxy.setVisible(awtComponent.isVisible());
+            // No proxy window is needed for a real window.
+            if (!(awtComponent instanceof Window)) {
+                // Setup the proxy window.
+                proxy = new ProxyWindow(this, swingComponent);
+                proxy.setBounds(awtComponent.getX(), awtComponent.getY(),
+                                awtComponent.getWidth(), awtComponent.getHeight());
+                proxy.setVisible(awtComponent.isVisible());
+            }
          }
      }

diff -r b80e8e3db13e src/share/classes/sun/awt/peer/cacio/CacioDialogPeer.java
--- a/src/share/classes/sun/awt/peer/cacio/CacioDialogPeer.java	Mon Apr 04 14:27:06 2011 +0200
+++ b/src/share/classes/sun/awt/peer/cacio/CacioDialogPeer.java	Mon Apr 04 16:01:00 2011 +0200
@@ -28,10 +28,13 @@
  import java.awt.Dialog;
  import java.awt.Window;
  import java.awt.peer.DialogPeer;
+import java.awt.peer.WindowPeer;
  import java.util.List;

  import javax.swing.JRootPane;

+import sun.awt.ComponentAccessor;
+
  class CacioDialogPeer extends CacioWindowPeer implements DialogPeer {

      public CacioDialogPeer(Dialog awtC, PlatformWindowFactory pwf) {
@@ -53,9 +56,14 @@
      }

      public void blockWindows(List<Window> windows) {
+        for (Window window : windows) {
+            WindowPeer peer = (WindowPeer)ComponentAccessor.getPeer(window);
+            if (peer != null) {
+              peer.setModalBlocked((Dialog)getAWTComponent(), true);
+            }
+        }
      }

-
      @Override
      protected int getRootPaneDecorationStyle() {
          if ((! isDecorateDialogs())
diff -r b80e8e3db13e src/share/classes/sun/awt/peer/cacio/CacioWindowPeer.java
--- a/src/share/classes/sun/awt/peer/cacio/CacioWindowPeer.java	Mon Apr 04 14:27:06 2011 +0200
+++ b/src/share/classes/sun/awt/peer/cacio/CacioWindowPeer.java	Mon Apr 04 16:01:00 2011 +0200
@@ -48,6 +48,8 @@
  import javax.swing.UIManager;
  import javax.swing.border.Border;

+import sun.awt.ComponentAccessor;
+
  class CacioWindowPeer extends CacioContainerPeer<Window, JRootPane>
                        implements WindowPeer {

@@ -57,6 +59,8 @@
      private static final Font defaultFont =
          new Font(Font.DIALOG, Font.PLAIN, 12);

+    protected boolean blocked;
+
      /**
       * Ask Cacio to decorate the windows. This method sets the decoration
       * for both dialogs and windows.
@@ -171,7 +175,19 @@
      }

      public void setModalBlocked(Dialog blocker, boolean blocked) {
-        // TODO Auto-generated method stub
+        if (this.blocked == blocked) {
+            return;
+        }
+
+        if (blocker != null) {
+            CacioWindowPeer dialogPeer = (CacioDialogPeer)ComponentAccessor.getPeer(blocker);
+            if (dialogPeer != null) {
+              dialogPeer.setModalBlocked(null, !blocked);
+            }
+        }
+
+        getToplevelWindow().setBlocked(blocked);
+        this.blocked = blocked;

      }

diff -r b80e8e3db13e src/share/classes/sun/awt/peer/cacio/PlatformToplevelWindow.java
--- a/src/share/classes/sun/awt/peer/cacio/PlatformToplevelWindow.java	Mon Apr 04 14:27:06 2011 +0200
+++ b/src/share/classes/sun/awt/peer/cacio/PlatformToplevelWindow.java	Mon Apr 04 16:01:00 2011 +0200
@@ -89,5 +89,16 @@
       * @param title the title to set
       */
      void setTitle(String title);
+
+    /**
+     * Blocks or unblocks the native window.
+     * This is only called for toplevel frames and dialogs.
+     *
+     * @param blocked true if set to blocked
+     *
+     * @see DialogPeer#blockWindows(List<Window>)
+     * @see WindowPeer#setModalBlocked(Dialog, boolean)
+     */
+    void setBlocked(boolean blocked);

  }
diff -r b80e8e3db13e src/share/classes/sun/awt/peer/cacio/ProxyWindowPeer.java
--- a/src/share/classes/sun/awt/peer/cacio/ProxyWindowPeer.java	Mon Apr 04 14:27:06 2011 +0200
+++ b/src/share/classes/sun/awt/peer/cacio/ProxyWindowPeer.java	Mon Apr 04 16:01:00 2011 +0200
@@ -87,9 +87,7 @@

      @Override
      public void setModalBlocked(Dialog blocker, boolean blocked) {
-        if (target instanceof WindowPeer) {
-            ((WindowPeer) target).setModalBlocked(blocker, blocked);
-        }
+        // Nothing to do here yet.
      }

      @Override
diff -r b80e8e3db13e src/share/classes/sun/awt/peer/cacio/managed/ManagedWindow.java
--- a/src/share/classes/sun/awt/peer/cacio/managed/ManagedWindow.java	Mon Apr 04 14:27:06 2011 +0200
+++ b/src/share/classes/sun/awt/peer/cacio/managed/ManagedWindow.java	Mon Apr 04 16:01:00 2011 +0200
@@ -409,6 +409,11 @@
      }

      @Override
+    public void setBlocked(boolean blocked) {
+        // TODO: Implement this.
+    }
+
+    @Override
      public boolean requestFocus(Component lightweightChild, boolean temporary,
                                  boolean focusedWindowChangeAllowed, long time,
                                  Cause cause) {



More information about the caciocavallo-dev mailing list