8041734: JFrame in full screen mode leaves empty workspace after close
Reviewed-by: azvegint, alexsch
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Tue Sep 23 20:17:56 2014 +0400
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Tue Sep 23 07:13:34 2014 +0400
@@ -567,7 +567,10 @@
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
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWrapper.java Tue Sep 23 20:17:56 2014 +0400
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWrapper.java Tue Sep 23 07:13:34 2014 +0400
@@ -54,8 +54,26 @@
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);
--- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/CWrapper.m Tue Sep 23 20:17:56 2014 +0400
+++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/CWrapper.m Tue Sep 23 07:13:34 2014 +0400
@@ -175,6 +175,23 @@
/*
* 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
* Signature: (J)V
*/