aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/solaris/classes/sun/awt/X11/XWindowPeer.java29
1 files changed, 24 insertions, 5 deletions
diff --git a/src/solaris/classes/sun/awt/X11/XWindowPeer.java b/src/solaris/classes/sun/awt/X11/XWindowPeer.java
index 2a9fe2a28a..d85781b2dd 100644
--- a/src/solaris/classes/sun/awt/X11/XWindowPeer.java
+++ b/src/solaris/classes/sun/awt/X11/XWindowPeer.java
@@ -57,6 +57,8 @@ import sun.awt.IconInfo;
import sun.java2d.pipe.Region;
+import javax.swing.*;
+
class XWindowPeer extends XPanelPeer implements WindowPeer,
DisplayChangedListener {
@@ -108,10 +110,10 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
* The type is supposed to be immutable while the peer object exists.
* The value gets initialized in the preInit() method.
*/
- private Window.Type windowType = Window.Type.NORMAL;
+ private Window.Type windowType = getWindowType();
- public final Window.Type getWindowType() {
- return windowType;
+ final Window.Type getWindowType() {
+ return windowType == null ? Window.Type.NORMAL : windowType;
}
// It need to be accessed from XFramePeer.
@@ -1229,7 +1231,8 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
boolean isOverrideRedirect() {
return XWM.getWMID() == XWM.OPENLOOK_WM ||
- Window.Type.POPUP.equals(getWindowType());
+ (Window.Type.POPUP.equals(getWindowType()) &&
+ !isDialogLikePopup(getTarget()));
}
final boolean isOLWMDecorBug() {
@@ -1969,7 +1972,9 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
typeAtom = protocol.XA_NET_WM_WINDOW_TYPE_UTILITY;
break;
case POPUP:
- typeAtom = protocol.XA_NET_WM_WINDOW_TYPE_POPUP_MENU;
+ typeAtom = isDialogLikePopup(getTarget()) ?
+ protocol.XA_NET_WM_WINDOW_TYPE_NORMAL :
+ protocol.XA_NET_WM_WINDOW_TYPE_POPUP_MENU;
break;
}
@@ -1984,6 +1989,20 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
}
}
+ boolean isDialogLikePopup (Object t) {
+ if (t instanceof JWindow) {
+ final JWindow target = (JWindow) getTarget();
+ final JRootPane rootPane = target.getRootPane();
+ if (rootPane != null) {
+ final Object value = rootPane.getClientProperty("SIMPLE_WINDOW");
+ if (value != null && (Boolean)value) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
@Override
public void xSetVisible(boolean visible) {
if (log.isLoggable(PlatformLogger.Level.FINE)) {