Skip to content

Commit f0c2f09

Browse files
author
Alisen Chung
committed
8296972: [macos13] java/awt/Frame/MaximizedToIconified/MaximizedToIconified.java: getExtendedState() != 6 as expected.
Reviewed-by: dmarkov, honkar
1 parent 9f46fc2 commit f0c2f09

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
@@ -42,6 +42,7 @@
4242
import java.awt.Window;
4343
import java.awt.event.FocusEvent;
4444
import java.awt.event.WindowEvent;
45+
import java.awt.event.WindowStateListener;
4546
import java.beans.PropertyChangeEvent;
4647
import java.beans.PropertyChangeListener;
4748
import java.lang.reflect.InvocationTargetException;
@@ -965,6 +966,33 @@ public boolean isFullScreenMode() {
965966
return isFullScreenMode;
966967
}
967968

969+
private void waitForWindowState(int state) {
970+
if (peer.getState() == state) {
971+
return;
972+
}
973+
974+
Object lock = new Object();
975+
WindowStateListener wsl = new WindowStateListener() {
976+
public void windowStateChanged(WindowEvent e) {
977+
synchronized (lock) {
978+
if (e.getNewState() == state) {
979+
lock.notifyAll();
980+
}
981+
}
982+
}
983+
};
984+
985+
target.addWindowStateListener(wsl);
986+
if (peer.getState() != state) {
987+
synchronized (lock) {
988+
try {
989+
lock.wait();
990+
} catch (InterruptedException ie) {}
991+
}
992+
}
993+
target.removeWindowStateListener(wsl);
994+
}
995+
968996
@Override
969997
public void setWindowState(int windowState) {
970998
if (peer == null || !peer.isVisible()) {
@@ -986,13 +1014,16 @@ public void setWindowState(int windowState) {
9861014
// let's return into the normal states first
9871015
// the zoom call toggles between the normal and the max states
9881016
unmaximize();
1017+
waitForWindowState(Frame.NORMAL);
9891018
}
9901019
execute(CWrapper.NSWindow::miniaturize);
9911020
break;
9921021
case Frame.MAXIMIZED_BOTH:
9931022
if (prevWindowState == Frame.ICONIFIED) {
9941023
// let's return into the normal states first
9951024
execute(CWrapper.NSWindow::deminiaturize);
1025+
waitForWindowState(Frame.NORMAL);
1026+
9961027
}
9971028
maximize();
9981029
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)