diff --git a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java index 5af2cdfe1d0..0a381941ede 100644 --- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java +++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java @@ -567,7 +567,10 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo CWrapper.NSWindow.makeKeyWindow(nsWindowPtr); } } else { + // immediately hide the window CWrapper.NSWindow.orderOut(nsWindowPtr); + // process the close + CWrapper.NSWindow.close(nsWindowPtr); } } else { // otherwise, put it in a proper z-order diff --git a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWrapper.java b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWrapper.java index f0fec624d8d..516b8de1550 100644 --- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWrapper.java +++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWrapper.java @@ -54,8 +54,26 @@ final class CWrapper { static native void orderFront(long window); static native void orderFrontRegardless(long window); static native void orderWindow(long window, int ordered, long relativeTo); + + /** + * Removes the window from the screen. + * + * @param window the pointer of the NSWindow + */ static native void orderOut(long window); + /** + * Removes the window from the screen and releases it. According to + * documentation this method should be similar to {@link #orderOut}, + * because we use ReleasedWhenClosed:NO, so the window shouldn't be + * released. But the close method works differently, for example it + * close the space if the window was in the full screen via + * {@link CPlatformWindow#toggleFullScreen()}. + * + * @param window the pointer of the NSWindow + */ + static native void close(long window); + static native void addChildWindow(long parent, long child, int ordered); static native void removeChildWindow(long parent, long child); diff --git a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/CWrapper.m b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/CWrapper.m index bf0d6b2fccd..bb14ef5ae84 100644 --- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/CWrapper.m +++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/CWrapper.m @@ -173,6 +173,23 @@ JNF_COCOA_ENTER(env); JNF_COCOA_EXIT(env); } +/* + * Class: sun_lwawt_macosx_CWrapper$NSWindow + * Method: close + * Signature: (J)V + */ +JNIEXPORT void JNICALL +Java_sun_lwawt_macosx_CWrapper_00024NSWindow_close + (JNIEnv *env, jclass cls, jlong windowPtr) +{ +JNF_COCOA_ENTER(env); + NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); + [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ + [window close]; + }]; +JNF_COCOA_EXIT(env); +} + /* * Class: sun_lwawt_macosx_CWrapper$NSWindow * Method: orderFrontRegardless