mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2025-12-06 09:29:38 +01:00
JBR-3642 java/awt/Window/8159168/SetShapeTest.java fails on macOS-x64 & macOS-aarch64
revert JBR-1417 fix (JBR 11 does not support chain of popups)
This commit is contained in:
@@ -964,15 +964,22 @@ public abstract class LWComponentPeer<T extends Component, D extends JComponent>
|
||||
return false;
|
||||
}
|
||||
|
||||
return parentPeer.requestWindowFocus(cause, () -> {
|
||||
boolean res = parentPeer.requestWindowFocus(cause);
|
||||
// If parent window can be made focused and has been made focused (synchronously)
|
||||
// then we can proceed with children, otherwise we retreat
|
||||
if (!res || !parentWindow.isFocused()) {
|
||||
if (focusLog.isLoggable(PlatformLogger.Level.FINE)) {
|
||||
focusLog.fine("request rejected, res= " + res + ", parentWindow.isFocused()=" +
|
||||
parentWindow.isFocused());
|
||||
}
|
||||
LWKeyboardFocusManagerPeer.removeLastFocusRequest(getTarget());
|
||||
}, () -> {
|
||||
KeyboardFocusManagerPeer kfmPeer = LWKeyboardFocusManagerPeer.getInstance();
|
||||
return false;
|
||||
}
|
||||
|
||||
Component focusOwner = kfmPeer.getCurrentFocusOwner();
|
||||
LWKeyboardFocusManagerPeer.deliverFocus(lightweightChild,
|
||||
getTarget(), false, cause, focusOwner);
|
||||
});
|
||||
KeyboardFocusManagerPeer kfmPeer = LWKeyboardFocusManagerPeer.getInstance();
|
||||
Component focusOwner = kfmPeer.getCurrentFocusOwner();
|
||||
return LWKeyboardFocusManagerPeer.deliverFocus(lightweightChild,
|
||||
getTarget(), false, cause, focusOwner);
|
||||
|
||||
case LWKeyboardFocusManagerPeer.SNFH_SUCCESS_HANDLED:
|
||||
return true;
|
||||
|
||||
@@ -61,18 +61,18 @@ public class LWLightweightFramePeer extends LWWindowPeer implements OverrideNati
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean requestWindowFocus(FocusEvent.Cause cause, Runnable r, Runnable lightweightRequest) {
|
||||
public boolean requestWindowFocus(FocusEvent.Cause cause) {
|
||||
if (!focusAllowedFor()) {
|
||||
return false;
|
||||
}
|
||||
/*if (getPlatformWindow().rejectFocusRequest(cause)) {
|
||||
if (getPlatformWindow().rejectFocusRequest(cause)) {
|
||||
return false;
|
||||
}*/
|
||||
}
|
||||
|
||||
Window opposite = LWKeyboardFocusManagerPeer.getInstance().
|
||||
getCurrentFocusedWindow();
|
||||
|
||||
changeFocusedWindow(true, opposite, () -> {});
|
||||
changeFocusedWindow(true, opposite);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -61,8 +61,16 @@ import java.util.List;
|
||||
|
||||
import javax.swing.JComponent;
|
||||
|
||||
import sun.awt.*;
|
||||
import sun.awt.AWTAccessor;
|
||||
import sun.awt.AWTAccessor.ComponentAccessor;
|
||||
import sun.awt.AppContext;
|
||||
import sun.awt.CGraphicsDevice;
|
||||
import sun.awt.DisplayChangedListener;
|
||||
import sun.awt.ExtendedKeyCodes;
|
||||
import sun.awt.FullScreenCapable;
|
||||
import sun.awt.SunToolkit;
|
||||
import sun.awt.TimedWindowEvent;
|
||||
import sun.awt.UngrabEvent;
|
||||
import sun.java2d.NullSurfaceData;
|
||||
import sun.java2d.SunGraphics2D;
|
||||
import sun.java2d.SunGraphicsEnvironment;
|
||||
@@ -290,24 +298,14 @@ public class LWWindowPeer
|
||||
if (!getTarget().isAutoRequestFocus()) {
|
||||
return;
|
||||
} else {
|
||||
requestWindowFocus(FocusEvent.Cause.ACTIVATION, () -> {}, () -> {});
|
||||
requestWindowFocus(FocusEvent.Cause.ACTIVATION);
|
||||
}
|
||||
// Focus the owner in case this window is focused.
|
||||
} else if (kfmPeer.getCurrentFocusedWindow() == getTarget()) {
|
||||
// Transfer focus to the owner.
|
||||
Window targetOwner = LWWindowPeer.this.getTarget().getOwner();
|
||||
|
||||
while (targetOwner != null && (targetOwner.getOwner() != null && !targetOwner.isFocusableWindow())) {
|
||||
targetOwner = targetOwner.getOwner();
|
||||
}
|
||||
|
||||
if (targetOwner != null) {
|
||||
|
||||
LWWindowPeer owner = (LWWindowPeer) AWTAccessor.getComponentAccessor().getPeer(targetOwner);
|
||||
|
||||
if (owner != null) {
|
||||
owner.requestWindowFocus(FocusEvent.Cause.ACTIVATION, () -> {}, () -> {});
|
||||
}
|
||||
LWWindowPeer owner = getOwnerFrameDialog(LWWindowPeer.this);
|
||||
if (owner != null) {
|
||||
owner.requestWindowFocus(FocusEvent.Cause.ACTIVATION);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -779,7 +777,7 @@ public class LWWindowPeer
|
||||
@Override
|
||||
public void notifyActivation(boolean activation, LWWindowPeer opposite) {
|
||||
Window oppositeWindow = (opposite == null)? null : opposite.getTarget();
|
||||
changeFocusedWindow(activation, oppositeWindow, () -> {});
|
||||
changeFocusedWindow(activation, oppositeWindow);
|
||||
}
|
||||
|
||||
// MouseDown in non-client area
|
||||
@@ -896,7 +894,7 @@ public class LWWindowPeer
|
||||
// 2. An active but not focused owner frame/dialog is clicked.
|
||||
// The mouse event then will trigger a focus request "in window" to the component, so the window
|
||||
// should gain focus before.
|
||||
requestWindowFocus(FocusEvent.Cause.MOUSE_EVENT, () -> {}, () -> {});
|
||||
requestWindowFocus(FocusEvent.Cause.MOUSE_EVENT);
|
||||
|
||||
mouseDownTarget[targetIdx] = targetPeer;
|
||||
} else if (id == MouseEvent.MOUSE_DRAGGED) {
|
||||
@@ -1247,19 +1245,17 @@ public class LWWindowPeer
|
||||
* Requests platform to set native focus on a frame/dialog.
|
||||
* In case of a simple window, triggers appropriate java focus change.
|
||||
*/
|
||||
public boolean requestWindowFocus(FocusEvent.Cause cause, Runnable rejectFocusRequest, Runnable lightweightRequest) {
|
||||
public boolean requestWindowFocus(FocusEvent.Cause cause) {
|
||||
if (focusLog.isLoggable(PlatformLogger.Level.FINE)) {
|
||||
focusLog.fine("requesting native focus to " + this);
|
||||
}
|
||||
|
||||
if (!focusAllowedFor()) {
|
||||
focusLog.fine("focus is not allowed");
|
||||
rejectFocusRequest.run();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (platformWindow.rejectFocusRequest(cause)) {
|
||||
rejectFocusRequest.run();
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1274,19 +1270,13 @@ public class LWWindowPeer
|
||||
|
||||
// In case the toplevel is active but not focused, change focus directly,
|
||||
// as requesting native focus on it will not have effect.
|
||||
if (getTarget() == currentActive && !getTarget().isFocused()) {
|
||||
changeFocusedWindow(true, opposite, lightweightRequest);
|
||||
if (getTarget() == currentActive && !getTarget().hasFocus()) {
|
||||
|
||||
changeFocusedWindow(true, opposite);
|
||||
return true;
|
||||
}
|
||||
|
||||
focusLog.fine("platformWindow.requestWindowFocus()");
|
||||
boolean requestFocusResult = platformWindow.requestWindowFocus();
|
||||
|
||||
if (requestFocusResult) {
|
||||
lightweightRequest.run();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return platformWindow.requestWindowFocus();
|
||||
}
|
||||
|
||||
protected boolean focusAllowedFor() {
|
||||
@@ -1314,7 +1304,7 @@ public class LWWindowPeer
|
||||
|
||||
@Override
|
||||
public void emulateActivation(boolean activate) {
|
||||
changeFocusedWindow(activate, null, () -> {});
|
||||
changeFocusedWindow(activate, null);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@@ -1333,7 +1323,7 @@ public class LWWindowPeer
|
||||
/*
|
||||
* Changes focused window on java level.
|
||||
*/
|
||||
protected void changeFocusedWindow(boolean becomesFocused, Window opposite, Runnable lightweightRequestRunnable) {
|
||||
protected void changeFocusedWindow(boolean becomesFocused, Window opposite) {
|
||||
if (focusLog.isLoggable(PlatformLogger.Level.FINE)) {
|
||||
focusLog.fine((becomesFocused?"gaining":"loosing") + " focus window: " + this);
|
||||
}
|
||||
@@ -1372,22 +1362,19 @@ public class LWWindowPeer
|
||||
}
|
||||
|
||||
KeyboardFocusManagerPeer kfmPeer = LWKeyboardFocusManagerPeer.getInstance();
|
||||
|
||||
if (!becomesFocused && kfmPeer.getCurrentFocusedWindow() != getTarget()) {
|
||||
// late window focus lost event - ingoring
|
||||
return;
|
||||
}
|
||||
|
||||
kfmPeer.setCurrentFocusedWindow(becomesFocused ? getTarget() : null);
|
||||
|
||||
int eventID = becomesFocused ? WindowEvent.WINDOW_GAINED_FOCUS : WindowEvent.WINDOW_LOST_FOCUS;
|
||||
WindowEvent windowEvent = new TimedWindowEvent(getTarget(), eventID, opposite, System.currentTimeMillis());
|
||||
|
||||
SunToolkit.setSystemGenerated(windowEvent);
|
||||
AWTAccessor.getAWTEventAccessor().setPosted(windowEvent);
|
||||
PeerEvent pe = new PeerEvent(getTarget(), () -> {
|
||||
((Component)windowEvent.getSource()).dispatchEvent(windowEvent);
|
||||
if (becomesFocused) {
|
||||
lightweightRequestRunnable.run();
|
||||
}
|
||||
}, PeerEvent.ULTIMATE_PRIORITY_EVENT);
|
||||
|
||||
// TODO: wrap in SequencedEvent
|
||||
postEvent(pe);
|
||||
postEvent(windowEvent);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1508,4 +1495,4 @@ public class LWWindowPeer
|
||||
}
|
||||
return handle[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -907,7 +907,4 @@ javax/print/PrintServiceLookup/CountPrintServices.java
|
||||
javax/print/attribute/AttributeTest.java nobug generic-all
|
||||
javax/print/attribute/GetCopiesSupported.java nobug generic-all
|
||||
javax/print/attribute/SidesPageRangesTest.java nobug generic-all
|
||||
javax/print/attribute/SupportedPrintableAreas.java nobug generic-all
|
||||
|
||||
############################################################################
|
||||
jb/java/awt/Focus/ModalDialogFromMenuTest.java JBR-2768 macosx-all
|
||||
javax/print/attribute/SupportedPrintableAreas.java nobug generic-all
|
||||
Reference in New Issue
Block a user