aboutsummaryrefslogtreecommitdiff
path: root/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java
diff options
context:
space:
mode:
authorArtem Bochkarev <artem.bochkarev@jetbrains.com>2019-08-20 11:11:56 +0300
committerArtem Bochkarev <artem.bochkarev@jetbrains.com>2019-09-13 18:54:55 +0300
commit0efbe5d9b9712232f097d2b057f984639937656f (patch)
treee2ef6750b0520d230c92dfaeeaa87ba6a55a7583 /src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java
parent7a2ccfc521ff17669a6e246373b4f49646eb277c (diff)
downloadJetBrainsRuntime-0efbe5d9b9712232f097d2b057f984639937656f.tar.gz
JBR-1762: fixed review commentsjb11_0_4-b480
Diffstat (limited to 'src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java')
-rw-r--r--src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java b/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java
index dd82623768d..26a41468238 100644
--- a/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java
+++ b/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java
@@ -1287,20 +1287,20 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
*/
if (isSimpleWindow()) {
if (target == XKeyboardFocusManagerPeer.getInstance().getCurrentFocusedWindow()) {
- Window owner = null;
- if (target instanceof Window && ((Window)target).getType() == Window.Type.POPUP) {
- // fix for: JBR-1762 Flotating navigation bar closes on navigate
- // (disposing latest popup causes to close all hierarchy of popups)
- final Container parent = AWTAccessor.getComponentAccessor().getParent(target);
- if (parent instanceof Window && ((Window)parent).getType() == Window.Type.POPUP) {
- owner = (Window) parent;
- }
+ // fix for: JBR-1762 Flotating navigation bar closes on navigate
+ // Use the same logic as in MacOS (see LWWindowPeer, was introduced in:
+ // 54bb2dd097 'JBR-1417 JBR 11 does not support chain of popups)'
+ Window targetOwner = ((Window)target).getOwner();
+ while (targetOwner != null && (targetOwner.getOwner() != null && !targetOwner.isFocusableWindow())) {
+ targetOwner = targetOwner.getOwner();
}
- if (owner == null) {
- owner = getDecoratedOwner((Window)target);
+
+ if (targetOwner != null) {
+ final XWindowPeer xwndpeer = ((XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(targetOwner));
+ if (xwndpeer != null) {
+ xwndpeer.requestWindowFocus(() -> {}, () -> {});
+ }
}
- ((XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(owner)).
- requestWindowFocus(() -> {}, () -> {});
}
}
}