8041734: JFrame in full screen mode leaves empty workspace after close

Reviewed-by: azvegint, alexsch
This commit is contained in:
Sergey Bylokhov 2014-09-23 07:13:34 +04:00
parent fa2dc11080
commit 1f7d2ae35c
3 changed files with 38 additions and 0 deletions

View File

@ -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

View File

@ -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);

View File

@ -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