diff options
author | Artem Bochkarev <artem.bochkarev@jetbrains.com> | 2019-08-20 11:11:56 +0300 |
---|---|---|
committer | Artem Bochkarev <artem.bochkarev@jetbrains.com> | 2019-09-13 18:54:55 +0300 |
commit | 0efbe5d9b9712232f097d2b057f984639937656f (patch) | |
tree | e2ef6750b0520d230c92dfaeeaa87ba6a55a7583 /src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java | |
parent | 7a2ccfc521ff17669a6e246373b4f49646eb277c (diff) | |
download | JetBrainsRuntime-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.java | 24 |
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(() -> {}, () -> {}); } } } |