--- a/jdk/src/macosx/native/sun/awt/AWTWindow.m Wed Oct 30 12:00:18 2013 +0400
+++ b/jdk/src/macosx/native/sun/awt/AWTWindow.m Wed Oct 30 20:54:42 2013 +0400
@@ -122,6 +122,7 @@
@synthesize styleBits;
@synthesize isEnabled;
@synthesize ownerWindow;
+@synthesize preFullScreenLevel;
- (void) updateMinMaxSize:(BOOL)resizable {
if (resizable) {
@@ -1212,3 +1213,58 @@
JNF_COCOA_EXIT(env);
}
+JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeEnterFullScreenMode
+(JNIEnv *env, jclass clazz, jlong windowPtr)
+{
+JNF_COCOA_ENTER(env);
+
+ NSWindow *nsWindow = OBJC(windowPtr);
+ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
+ AWTWindow *window = (AWTWindow*)[nsWindow delegate];
+ NSNumber* screenID = [AWTWindow getNSWindowDisplayID_AppKitThread: nsWindow];
+ CGDirectDisplayID aID = [screenID intValue];
+
+ if (CGDisplayCapture(aID) == kCGErrorSuccess) {
+ // remove window decoration
+ NSUInteger styleMask = [AWTWindow styleMaskForStyleBits:window.styleBits];
+ [nsWindow setStyleMask:(styleMask & ~NSTitledWindowMask) | NSBorderlessWindowMask];
+
+ int shieldLevel = CGShieldingWindowLevel();
+ window.preFullScreenLevel = [nsWindow level];
+ [nsWindow setLevel: shieldLevel];
+
+ NSRect screenRect = [[nsWindow screen] frame];
+ [nsWindow setFrame:screenRect display:YES];
+ } else {
+ [JNFException raise:env as:kRuntimeException reason:"Failed to enter full screen."];
+ }
+ }];
+
+JNF_COCOA_EXIT(env);
+}
+
+JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeExitFullScreenMode
+(JNIEnv *env, jclass clazz, jlong windowPtr)
+{
+JNF_COCOA_ENTER(env);
+
+ NSWindow *nsWindow = OBJC(windowPtr);
+ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
+ AWTWindow *window = (AWTWindow*)[nsWindow delegate];
+ NSNumber* screenID = [AWTWindow getNSWindowDisplayID_AppKitThread: nsWindow];
+ CGDirectDisplayID aID = [screenID intValue];
+
+ if (CGDisplayRelease(aID) == kCGErrorSuccess) {
+ NSUInteger styleMask = [AWTWindow styleMaskForStyleBits:window.styleBits];
+ [nsWindow setStyleMask:styleMask];
+ [nsWindow setLevel: window.preFullScreenLevel];
+
+ // GraphicsDevice takes care of restoring pre full screen bounds
+ } else {
+ [JNFException raise:env as:kRuntimeException reason:"Failed to exit full screen."];
+ }
+ }];
+
+JNF_COCOA_EXIT(env);
+}
+