提交 3c6bff65 编写于 作者: D dmarkov

8171949: [macosx] AWT_ZoomFrame Automated tests fail with error: The bitwise...

8171949: [macosx] AWT_ZoomFrame Automated tests fail with error: The bitwise mask Frame.ICONIFIED is not setwhen the frame is in ICONIFIED state
Reviewed-by: ssadetsky, serb
上级 61a45b20
......@@ -212,6 +212,8 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
private volatile boolean isFullScreenMode;
private boolean isFullScreenAnimationOn;
private volatile boolean isIconifyAnimationActive;
private Window target;
private LWWindowPeer peer;
protected CPlatformView contentView;
......@@ -992,6 +994,9 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
if (peer != null) {
peer.notifyIconify(iconify);
}
if (iconify) {
isIconifyAnimationActive = false;
}
}
private void deliverZoom(final boolean isZoomed) {
......@@ -1061,6 +1066,17 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
return true;
}
private boolean isIconified() {
boolean isIconified = false;
if (target instanceof Frame) {
int state = ((Frame)target).getExtendedState();
if ((state & Frame.ICONIFIED) != 0) {
isIconified = true;
}
}
return isIconifyAnimationActive || isIconified;
}
private boolean isOneOfOwnersOrSelf(CPlatformWindow window) {
while (window != null) {
if (this == window) {
......@@ -1084,11 +1100,14 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
// the windows are ordered above their nearest owner; ancestors of the window,
// which is going to become 'main window', are placed above their siblings.
CPlatformWindow rootOwner = getRootOwner();
if (rootOwner.isVisible()) {
if (rootOwner.isVisible() && !rootOwner.isIconified()) {
rootOwner.execute(CWrapper.NSWindow::orderFront);
}
final WindowAccessor windowAccessor = AWTAccessor.getWindowAccessor();
orderAboveSiblingsImpl(windowAccessor.getOwnedWindows(rootOwner.target));
// Do not order child windows of iconified owner.
if (!rootOwner.isIconified()) {
final WindowAccessor windowAccessor = AWTAccessor.getWindowAccessor();
orderAboveSiblingsImpl(windowAccessor.getOwnedWindows(rootOwner.target));
}
}
private void orderAboveSiblingsImpl(Window[] windows) {
......@@ -1099,10 +1118,12 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
// Go through the list of windows and perform ordering.
for (Window w : windows) {
boolean iconified = false;
final Object p = componentAccessor.getPeer(w);
if (p instanceof LWWindowPeer) {
CPlatformWindow pw = (CPlatformWindow)((LWWindowPeer)p).getPlatformWindow();
if (pw != null && pw.isVisible()) {
iconified = isIconified();
if (pw != null && pw.isVisible() && !iconified) {
// If the window is one of ancestors of 'main window' or is going to become main by itself,
// the window should be ordered above its siblings; otherwise the window is just ordered
// above its nearest parent.
......@@ -1118,10 +1139,13 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
pw.applyWindowLevel(w);
}
}
// Retrieve the child windows for each window from the list and store them for future use.
// Retrieve the child windows for each window from the list except iconified ones
// and store them for future use.
// Note: we collect data about child windows even for invisible owners, since they may have
// visible children.
childWindows.addAll(Arrays.asList(windowAccessor.getOwnedWindows(w)));
if (!iconified) {
childWindows.addAll(Arrays.asList(windowAccessor.getOwnedWindows(w)));
}
}
// If some windows, which have just been ordered, have any child windows, let's start new iteration
// and order these child windows.
......@@ -1142,6 +1166,10 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
// NATIVE CALLBACKS
// ----------------------------------------------------------------------
private void windowWillMiniaturize() {
isIconifyAnimationActive = true;
}
private void windowDidBecomeMain() {
assert CThreading.assertAppKit();
......
......@@ -614,6 +614,14 @@ AWT_ASSERT_APPKIT_THREAD;
AWT_ASSERT_APPKIT_THREAD;
self.isMinimizing = YES;
JNIEnv *env = [ThreadUtilities getJNIEnv];
jobject platformWindow = [self.javaPlatformWindow jObjectWithEnv:env];
if (platformWindow != NULL) {
static JNF_MEMBER_CACHE(jm_windowWillMiniaturize, jc_CPlatformWindow, "windowWillMiniaturize", "()V");
JNFCallVoidMethod(env, platformWindow, jm_windowWillMiniaturize);
(*env)->DeleteLocalRef(env, platformWindow);
}
// Excplicitly make myself a key window to avoid possible
// negative visual effects during iconify operation
[self.nsWindow makeKeyAndOrderFront:self.nsWindow];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册