diff options
author | Denis Fokin <denis.fokin@jetbrains.com> | 2018-04-03 20:07:07 +0300 |
---|---|---|
committer | Denis Fokin <denis.fokin@jetbrains.com> | 2018-04-26 19:05:46 +0300 |
commit | 70b7929cd3d67b31d26dac33759717d3489dc033 (patch) | |
tree | 4e559432edf516a2bbcc6f592f62f281b24caf6b | |
parent | 0683560cfcdf37a536b3b6bf133c52dddc0b1ebd (diff) | |
download | jdk8u_jdk-70b7929cd3d67b31d26dac33759717d3489dc033.tar.gz |
JRE-705 Z-order of child windows is broken on Mac OSjb8u152-b1136.38jb8u152-b1136.37
(cherry picked from commit f10c39f)
-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)) { |