Mercurial > hg > icedtea7-forest > jdk
changeset 9164:2cdc473fc6bc
8041734: JFrame in full screen mode leaves empty workspace after close
Reviewed-by: azvegint, alexsch
author | serb |
---|---|
date | Tue, 23 Sep 2014 07:13:34 +0400 |
parents | 6e0226f8b489 |
children | 81d30fd2e5c4 |
files | src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java src/macosx/classes/sun/lwawt/macosx/CWrapper.java src/macosx/native/sun/awt/CWrapper.m |
diffstat | 3 files changed, 38 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Tue May 17 13:12:50 2016 +0300 +++ b/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Tue Sep 23 07:13:34 2014 +0400 @@ -548,7 +548,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/src/macosx/classes/sun/lwawt/macosx/CWrapper.java Tue May 17 13:12:50 2016 +0300 +++ b/src/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/src/macosx/native/sun/awt/CWrapper.m Tue May 17 13:12:50 2016 +0300 +++ b/src/macosx/native/sun/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 */