Skip to content

Commit 488baa5

Browse files
Andrew Luvprovodin
Andrew Lu
authored andcommitted
8296972: [macos13] java/awt/Frame/MaximizedToIconified/MaximizedToIconified.java: getExtendedState() != 6 as expected.
Backport-of: f0c2f09
1 parent 851eb2d commit 488baa5

File tree

3 files changed

+39
-2
lines changed

3 files changed

+39
-2
lines changed

src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java

+31
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import java.awt.Window;
4646
import java.awt.event.FocusEvent;
4747
import java.awt.event.WindowEvent;
48+
import java.awt.event.WindowStateListener;
4849
import java.awt.peer.ComponentPeer;
4950
import java.beans.PropertyChangeEvent;
5051
import java.beans.PropertyChangeListener;
@@ -1066,6 +1067,33 @@ public boolean isFullScreenMode() {
10661067
return isFullScreenMode;
10671068
}
10681069

1070+
private void waitForWindowState(int state) {
1071+
if (peer.getState() == state) {
1072+
return;
1073+
}
1074+
1075+
Object lock = new Object();
1076+
WindowStateListener wsl = new WindowStateListener() {
1077+
public void windowStateChanged(WindowEvent e) {
1078+
synchronized (lock) {
1079+
if (e.getNewState() == state) {
1080+
lock.notifyAll();
1081+
}
1082+
}
1083+
}
1084+
};
1085+
1086+
target.addWindowStateListener(wsl);
1087+
if (peer.getState() != state) {
1088+
synchronized (lock) {
1089+
try {
1090+
lock.wait();
1091+
} catch (InterruptedException ie) {}
1092+
}
1093+
}
1094+
target.removeWindowStateListener(wsl);
1095+
}
1096+
10691097
@Override
10701098
public void setWindowState(int windowState) {
10711099
if (peer == null || !peer.isVisible()) {
@@ -1087,13 +1115,16 @@ public void setWindowState(int windowState) {
10871115
// let's return into the normal states first
10881116
// the zoom call toggles between the normal and the max states
10891117
unmaximize();
1118+
waitForWindowState(Frame.NORMAL);
10901119
}
10911120
execute(CWrapper.NSWindow::miniaturize);
10921121
break;
10931122
case Frame.MAXIMIZED_BOTH:
10941123
if (prevWindowState == Frame.ICONIFIED) {
10951124
// let's return into the normal states first
10961125
execute(CWrapper.NSWindow::deminiaturize);
1126+
waitForWindowState(Frame.NORMAL);
1127+
10971128
}
10981129
maximize();
10991130
break;

test/jdk/ProblemList.txt

-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,6 @@ java/awt/Focus/FocusOwnerFrameOnClick/FocusOwnerFrameOnClick.java 8081489 generi
119119
java/awt/Focus/IconifiedFrameFocusChangeTest/IconifiedFrameFocusChangeTest.java 6849364 generic-all
120120
java/awt/Focus/AutoRequestFocusTest/AutoRequestFocusToFrontTest.java 6848406 generic-all
121121
java/awt/Focus/AutoRequestFocusTest/AutoRequestFocusSetVisibleTest.java 6848407 generic-all
122-
java/awt/Frame/MaximizedToIconified/MaximizedToIconified.java 8296972 macosx-all
123122
java/awt/Frame/MaximizedUndecorated/MaximizedUndecorated.java 8022302 generic-all
124123
java/awt/Frame/RestoreToOppositeScreen/RestoreToOppositeScreen.java 8286840 linux-all
125124
java/awt/FileDialog/FileDialogIconTest/FileDialogIconTest.java 8160558 windows-all

test/jdk/java/awt/Frame/MaximizedToIconified/MaximizedToIconified.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545

4646
public class MaximizedToIconified
4747
{
48-
static volatile int lastFrameState = Frame.NORMAL;
48+
static volatile int lastFrameState;
4949
static volatile boolean failed = false;
5050
static volatile Toolkit myKit;
5151
private static Robot robot;
@@ -77,6 +77,8 @@ private static void examineStates(int states[]) {
7777
frame.setSize(200, 200);
7878
frame.setVisible(true);
7979

80+
lastFrameState = Frame.NORMAL;
81+
8082
robot.waitForIdle();
8183

8284
frame.addWindowStateListener(new WindowStateListener() {
@@ -114,7 +116,12 @@ private static void doTest() {
114116
// because Toolkit.isFrameStateSupported() method reports these states
115117
// as not supported. And such states will simply be skipped.
116118
examineStates(new int[] {Frame.MAXIMIZED_BOTH, Frame.ICONIFIED, Frame.NORMAL});
119+
System.out.println("------");
117120
examineStates(new int[] {Frame.ICONIFIED, Frame.MAXIMIZED_BOTH, Frame.NORMAL});
121+
System.out.println("------");
122+
examineStates(new int[] {Frame.NORMAL, Frame.MAXIMIZED_BOTH, Frame.ICONIFIED});
123+
System.out.println("------");
124+
examineStates(new int[] {Frame.NORMAL, Frame.ICONIFIED, Frame.MAXIMIZED_BOTH});
118125

119126
}
120127

0 commit comments

Comments
 (0)