aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Fokin <denis.fokin@jetbrains.com>2018-04-03 20:07:07 +0300
committerDenis Fokin <denis.fokin@jetbrains.com>2018-04-26 19:05:46 +0300
commit70b7929cd3d67b31d26dac33759717d3489dc033 (patch)
tree4e559432edf516a2bbcc6f592f62f281b24caf6b
parent0683560cfcdf37a536b3b6bf133c52dddc0b1ebd (diff)
downloadjdk8u_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.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)) {