460 self.nsWindow = nil;
461 self.ownerWindow = nil;
462 [super dealloc];
463 }
464
465 // Tests whether window is blocked by modal dialog/window
466 - (BOOL) isBlocked {
467 BOOL isBlocked = NO;
468
469 JNIEnv *env = [ThreadUtilities getJNIEnv];
470 jobject platformWindow = [self.javaPlatformWindow jObjectWithEnv:env];
471 if (platformWindow != NULL) {
472 static JNF_MEMBER_CACHE(jm_isBlocked, jc_CPlatformWindow, "isBlocked", "()Z");
473 isBlocked = JNFCallBooleanMethod(env, platformWindow, jm_isBlocked) == JNI_TRUE ? YES : NO;
474 (*env)->DeleteLocalRef(env, platformWindow);
475 }
476
477 return isBlocked;
478 }
479
480 // Tests whether the corresponding Java platform window is visible or not
481 + (BOOL) isJavaPlatformWindowVisible:(NSWindow *)window {
482 BOOL isVisible = NO;
483
484 if ([AWTWindow isAWTWindow:window] && [window delegate] != nil) {
485 AWTWindow *awtWindow = (AWTWindow *)[window delegate];
486 [AWTToolkit eventCountPlusPlus];
487
488 JNIEnv *env = [ThreadUtilities getJNIEnv];
489 jobject platformWindow = [awtWindow.javaPlatformWindow jObjectWithEnv:env];
490 if (platformWindow != NULL) {
491 static JNF_MEMBER_CACHE(jm_isVisible, jc_CPlatformWindow, "isVisible", "()Z");
492 isVisible = JNFCallBooleanMethod(env, platformWindow, jm_isVisible) == JNI_TRUE ? YES : NO;
493 (*env)->DeleteLocalRef(env, platformWindow);
494
495 }
496 }
497 return isVisible;
498 }
499
526 [window setLevel:NSFloatingWindowLevel];
527 } else {
528 // Focus owner has changed, move the childWindow
529 // back to normal window level
530 [window setLevel:NSNormalWindowLevel];
531 }
532 // The childWindow should be displayed in front of
533 // its nearest parentWindow
534 [window orderWindow:NSWindowAbove relativeTo:[owner.nsWindow windowNumber]];
535 break;
536 }
537 awtWindow = awtWindow.ownerWindow;
538 }
539 }
540 }
541 }
542
543 // NSWindow overrides
544 - (BOOL) canBecomeKeyWindow {
545 AWT_ASSERT_APPKIT_THREAD;
546 return self.isEnabled && IS(self.styleBits, SHOULD_BECOME_KEY);
547 }
548
549 - (BOOL) canBecomeMainWindow {
550 AWT_ASSERT_APPKIT_THREAD;
551 if (!self.isEnabled) {
552 // Native system can bring up the NSWindow to
553 // the top even if the window is not main.
554 // We should bring up the modal dialog manually
555 [AWTToolkit eventCountPlusPlus];
556
557 JNIEnv *env = [ThreadUtilities getJNIEnv];
558 jobject platformWindow = [self.javaPlatformWindow jObjectWithEnv:env];
559 if (platformWindow != NULL) {
560 static JNF_MEMBER_CACHE(jm_checkBlockingAndOrder, jc_CPlatformWindow,
561 "checkBlockingAndOrder", "()Z");
562 JNFCallBooleanMethod(env, platformWindow, jm_checkBlockingAndOrder);
563 (*env)->DeleteLocalRef(env, platformWindow);
564 }
565 }
566
|
460 self.nsWindow = nil;
461 self.ownerWindow = nil;
462 [super dealloc];
463 }
464
465 // Tests whether window is blocked by modal dialog/window
466 - (BOOL) isBlocked {
467 BOOL isBlocked = NO;
468
469 JNIEnv *env = [ThreadUtilities getJNIEnv];
470 jobject platformWindow = [self.javaPlatformWindow jObjectWithEnv:env];
471 if (platformWindow != NULL) {
472 static JNF_MEMBER_CACHE(jm_isBlocked, jc_CPlatformWindow, "isBlocked", "()Z");
473 isBlocked = JNFCallBooleanMethod(env, platformWindow, jm_isBlocked) == JNI_TRUE ? YES : NO;
474 (*env)->DeleteLocalRef(env, platformWindow);
475 }
476
477 return isBlocked;
478 }
479
480 // Test whether window is simple window and owned by embedded frame
481 - (BOOL) isSimpleWindowOwnedByEmbeddedFrame {
482 BOOL isSimpleWindowOwnedByEmbeddedFrame = NO;
483
484 JNIEnv *env = [ThreadUtilities getJNIEnv];
485 jobject platformWindow = [self.javaPlatformWindow jObjectWithEnv:env];
486 if (platformWindow != NULL) {
487 static JNF_MEMBER_CACHE(jm_isBlocked, jc_CPlatformWindow, "isSimpleWindowOwnedByEmbeddedFrame", "()Z");
488 isSimpleWindowOwnedByEmbeddedFrame = JNFCallBooleanMethod(env, platformWindow, jm_isBlocked) == JNI_TRUE ? YES : NO;
489 (*env)->DeleteLocalRef(env, platformWindow);
490 }
491
492 return isSimpleWindowOwnedByEmbeddedFrame;
493 }
494
495 // Tests whether the corresponding Java platform window is visible or not
496 + (BOOL) isJavaPlatformWindowVisible:(NSWindow *)window {
497 BOOL isVisible = NO;
498
499 if ([AWTWindow isAWTWindow:window] && [window delegate] != nil) {
500 AWTWindow *awtWindow = (AWTWindow *)[window delegate];
501 [AWTToolkit eventCountPlusPlus];
502
503 JNIEnv *env = [ThreadUtilities getJNIEnv];
504 jobject platformWindow = [awtWindow.javaPlatformWindow jObjectWithEnv:env];
505 if (platformWindow != NULL) {
506 static JNF_MEMBER_CACHE(jm_isVisible, jc_CPlatformWindow, "isVisible", "()Z");
507 isVisible = JNFCallBooleanMethod(env, platformWindow, jm_isVisible) == JNI_TRUE ? YES : NO;
508 (*env)->DeleteLocalRef(env, platformWindow);
509
510 }
511 }
512 return isVisible;
513 }
514
541 [window setLevel:NSFloatingWindowLevel];
542 } else {
543 // Focus owner has changed, move the childWindow
544 // back to normal window level
545 [window setLevel:NSNormalWindowLevel];
546 }
547 // The childWindow should be displayed in front of
548 // its nearest parentWindow
549 [window orderWindow:NSWindowAbove relativeTo:[owner.nsWindow windowNumber]];
550 break;
551 }
552 awtWindow = awtWindow.ownerWindow;
553 }
554 }
555 }
556 }
557
558 // NSWindow overrides
559 - (BOOL) canBecomeKeyWindow {
560 AWT_ASSERT_APPKIT_THREAD;
561 return self.isEnabled && (IS(self.styleBits, SHOULD_BECOME_KEY) || [self isSimpleWindowOwnedByEmbeddedFrame]);
562 }
563
564 - (BOOL) canBecomeMainWindow {
565 AWT_ASSERT_APPKIT_THREAD;
566 if (!self.isEnabled) {
567 // Native system can bring up the NSWindow to
568 // the top even if the window is not main.
569 // We should bring up the modal dialog manually
570 [AWTToolkit eventCountPlusPlus];
571
572 JNIEnv *env = [ThreadUtilities getJNIEnv];
573 jobject platformWindow = [self.javaPlatformWindow jObjectWithEnv:env];
574 if (platformWindow != NULL) {
575 static JNF_MEMBER_CACHE(jm_checkBlockingAndOrder, jc_CPlatformWindow,
576 "checkBlockingAndOrder", "()Z");
577 JNFCallBooleanMethod(env, platformWindow, jm_checkBlockingAndOrder);
578 (*env)->DeleteLocalRef(env, platformWindow);
579 }
580 }
581
|