diff options
-rw-r--r-- | src/solaris/classes/sun/awt/X11/XWindowPeer.java | 29 |
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)) { |