Compare commits

...

2 Commits

Author SHA1 Message Date
Artem Bochkarev
a6e86d489e JBR-1762: fixed review comments 2019-08-20 11:11:56 +03:00
Artem Bochkarev
883d5df342 JBR-1762: request focus of immediate parent when dispose popup
because requesting focus for frame-parent causes to close whole popup chain
2019-08-19 15:23:46 +03:00

View File

@@ -25,23 +25,7 @@
package sun.awt.X11;
import java.awt.AWTEvent;
import java.awt.Component;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.SystemColor;
import java.awt.Window;
import java.awt.*;
import java.awt.event.ComponentEvent;
import java.awt.event.FocusEvent;
import java.awt.event.InvocationEvent;
@@ -52,6 +36,7 @@ import java.io.UnsupportedEncodingException;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.*;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
@@ -1302,9 +1287,20 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
*/
if (isSimpleWindow()) {
if (target == XKeyboardFocusManagerPeer.getInstance().getCurrentFocusedWindow()) {
Window owner = getDecoratedOwner((Window)target);
((XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(owner)).
requestWindowFocus(() -> {}, () -> {});
// 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 (targetOwner != null) {
final XWindowPeer xwndpeer = ((XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(targetOwner));
if (xwndpeer != null) {
xwndpeer.requestWindowFocus(() -> {}, () -> {});
}
}
}
}
}