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