src/macosx/native/sun/awt/AWTWindow.m

Print this page

        

*** 56,65 **** --- 56,66 ---- @synthesize javaPlatformWindow; @synthesize javaMenuBar; @synthesize javaMinSize; @synthesize javaMaxSize; @synthesize styleBits; + @synthesize isModallyBlocked; - (void) updateMinMaxSize:(BOOL)resizable { if (resizable) { [self setMinSize:self.javaMinSize]; [self setMaxSize:self.javaMaxSize];
*** 155,164 **** --- 156,166 ---- backing:NSBackingStoreBuffered defer:NO]; if (self == nil) return nil; // no hope + self.isModallyBlocked = NO; self.javaPlatformWindow = platformWindow; self.styleBits = bits; [self setPropertiesForStyleBits:styleBits mask:MASK(_METHOD_PROP_BITMASK)]; [self setDelegate:self];
*** 177,196 **** [self.javaPlatformWindow setJObject:nil withEnv:env]; [super dealloc]; } - // NSWindow overrides - (BOOL) canBecomeKeyWindow { AWT_ASSERT_APPKIT_THREAD; ! return IS(self.styleBits, SHOULD_BECOME_KEY); } - (BOOL) canBecomeMainWindow { AWT_ASSERT_APPKIT_THREAD; ! return IS(self.styleBits, SHOULD_BECOME_MAIN); } - (BOOL) worksWhenModal { AWT_ASSERT_APPKIT_THREAD; return IS(self.styleBits, MODAL_EXCLUDED); --- 179,197 ---- [self.javaPlatformWindow setJObject:nil withEnv:env]; [super dealloc]; } // NSWindow overrides - (BOOL) canBecomeKeyWindow { AWT_ASSERT_APPKIT_THREAD; ! return !self.isModallyBlocked && IS(self.styleBits, SHOULD_BECOME_KEY); } - (BOOL) canBecomeMainWindow { AWT_ASSERT_APPKIT_THREAD; ! return !self.isModallyBlocked && IS(self.styleBits, SHOULD_BECOME_MAIN); } - (BOOL) worksWhenModal { AWT_ASSERT_APPKIT_THREAD; return IS(self.styleBits, MODAL_EXCLUDED);
*** 971,975 **** --- 972,1027 ---- JNF_COCOA_EXIT(env); return underMouse; } + + JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeModallyBlocked + (JNIEnv *env, jclass clazz, jlong windowPtr) + { + JNF_COCOA_ENTER(env); + + AWTWindow *window = OBJC(windowPtr); + if (IS(window.styleBits, MODAL_EXCLUDED)) { + return; + } + + window.isModallyBlocked = YES; + [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ + [[window standardWindowButton:NSWindowCloseButton] setEnabled: NO]; + [[window standardWindowButton:NSWindowMiniaturizeButton] setEnabled: NO]; + [[window standardWindowButton:NSWindowZoomButton] setEnabled: NO]; + + [window updateMinMaxSize:NO]; + [window setShowsResizeIndicator:NO]; + }]; + + JNF_COCOA_EXIT(env); + } + + JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeModallyUnblocked + (JNIEnv *env, jclass clazz, jlong windowPtr) + { + JNF_COCOA_ENTER(env); + + AWTWindow *window = OBJC(windowPtr); + if (IS(window.styleBits, MODAL_EXCLUDED)) { + return; + } + + window.isModallyBlocked = NO; + [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ + [[window standardWindowButton:NSWindowCloseButton] setEnabled: IS(window.styleBits, CLOSEABLE)]; + [[window standardWindowButton:NSWindowMiniaturizeButton] setEnabled: IS(window.styleBits, MINIMIZABLE)]; + [[window standardWindowButton:NSWindowZoomButton] setEnabled: IS(window.styleBits, ZOOMABLE)]; + + if (IS(window.styleBits, RESIZABLE)) { + [window updateMinMaxSize:YES]; + [window setShowsResizeIndicator:YES]; + } + + }]; + + JNF_COCOA_EXIT(env); + } + +