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

Print this page




 307 + (void) synthesizeMouseEnteredExitedEventsForAllWindows {
 308 
 309     NSInteger topmostWindowUnderMouseID = [AWTWindow getTopmostWindowUnderMouseID];
 310     NSArray *windows = [NSApp windows];
 311     NSWindow *window;
 312 
 313     NSEnumerator *windowEnumerator = [windows objectEnumerator];
 314     while ((window = [windowEnumerator nextObject]) != nil) {
 315         if ([AWTWindow isAWTWindow: window]) {
 316             BOOL isUnderMouse = ([window windowNumber] == topmostWindowUnderMouseID);
 317             BOOL mouseIsOver = [[window contentView] mouseIsOver];
 318             if (isUnderMouse && !mouseIsOver) {
 319                 [AWTWindow synthesizeMouseEnteredExitedEvents:window withType:NSMouseEntered];
 320             } else if (!isUnderMouse && mouseIsOver) {
 321                 [AWTWindow synthesizeMouseEnteredExitedEvents:window withType:NSMouseExited];
 322             }
 323         }
 324     }
 325 }
 326 







 327 - (void) dealloc {
 328 AWT_ASSERT_APPKIT_THREAD;
 329 
 330     JNIEnv *env = [ThreadUtilities getJNIEnv];
 331     [self.javaPlatformWindow setJObject:nil withEnv:env];
 332 
 333     self.nsWindow = nil;
 334 
 335     [super dealloc];
 336 }
 337 
 338 // NSWindow overrides
 339 - (BOOL) canBecomeKeyWindow {
 340 AWT_ASSERT_APPKIT_THREAD;
 341     return self.isEnabled && IS(self.styleBits, SHOULD_BECOME_KEY);
 342 }
 343 
 344 - (BOOL) canBecomeMainWindow {
 345 AWT_ASSERT_APPKIT_THREAD;
 346     return self.isEnabled && IS(self.styleBits, SHOULD_BECOME_MAIN);


1096 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSynthesizeMouseEnteredExitedEvents
1097 (JNIEnv *env, jclass clazz)
1098 {
1099     JNF_COCOA_ENTER(env);
1100     AWT_ASSERT_NOT_APPKIT_THREAD;
1101 
1102     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
1103         AWT_ASSERT_APPKIT_THREAD;
1104         [AWTWindow synthesizeMouseEnteredExitedEventsForAllWindows];
1105     }];
1106 
1107     JNF_COCOA_EXIT(env);
1108 }
1109 
1110 /*
1111  * Class:     sun_lwawt_macosx_CPlatformWindow
1112  * Method:    nativeGetDisplayID_AppKitThread
1113  * Signature: (J)I
1114  */
1115 JNIEXPORT jint JNICALL
1116 Java_sun_lwawt_macosx_CPlatformWindow_nativeGetNSWindowDisplayID_1AppKitThread
1117 (JNIEnv *env, jclass clazz, jlong windowPtr)
1118 {
1119     jint ret; // CGDirectDisplayID
1120 
1121 JNF_COCOA_ENTER(env);
1122 AWT_ASSERT_APPKIT_THREAD;
1123 
1124     NSWindow *window = OBJC(windowPtr);
1125     NSScreen *screen = [window screen];
1126     NSDictionary *deviceDescription = [screen deviceDescription];
1127     NSNumber *displayID = [deviceDescription objectForKey:@"NSScreenNumber"];
1128     ret = (jint)[displayID intValue];




1129 
1130 JNF_COCOA_EXIT(env);
1131 
1132     return ret;
1133 }
1134 
1135 /*
1136  * Class:     sun_lwawt_macosx_CPlatformWindow
1137  * Method:    _toggleFullScreenMode
1138  * Signature: (J)V
1139  */
1140 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow__1toggleFullScreenMode
1141 (JNIEnv *env, jobject peer, jlong windowPtr)
1142 {
1143 JNF_COCOA_ENTER(env);
1144 
1145     NSWindow *nsWindow = OBJC(windowPtr);
1146     SEL toggleFullScreenSelector = @selector(toggleFullScreen:);
1147     if (![nsWindow respondsToSelector:toggleFullScreenSelector]) return;
1148 




 307 + (void) synthesizeMouseEnteredExitedEventsForAllWindows {
 308 
 309     NSInteger topmostWindowUnderMouseID = [AWTWindow getTopmostWindowUnderMouseID];
 310     NSArray *windows = [NSApp windows];
 311     NSWindow *window;
 312 
 313     NSEnumerator *windowEnumerator = [windows objectEnumerator];
 314     while ((window = [windowEnumerator nextObject]) != nil) {
 315         if ([AWTWindow isAWTWindow: window]) {
 316             BOOL isUnderMouse = ([window windowNumber] == topmostWindowUnderMouseID);
 317             BOOL mouseIsOver = [[window contentView] mouseIsOver];
 318             if (isUnderMouse && !mouseIsOver) {
 319                 [AWTWindow synthesizeMouseEnteredExitedEvents:window withType:NSMouseEntered];
 320             } else if (!isUnderMouse && mouseIsOver) {
 321                 [AWTWindow synthesizeMouseEnteredExitedEvents:window withType:NSMouseExited];
 322             }
 323         }
 324     }
 325 }
 326 
 327 + (NSNumber *) getNSWindowDisplayID_AppKitThread:(NSWindow *)window {
 328     AWT_ASSERT_APPKIT_THREAD;
 329     NSScreen *screen = [window screen];
 330     NSDictionary *deviceDescription = [screen deviceDescription];
 331     return [deviceDescription objectForKey:@"NSScreenNumber"];
 332 }
 333 
 334 - (void) dealloc {
 335 AWT_ASSERT_APPKIT_THREAD;
 336 
 337     JNIEnv *env = [ThreadUtilities getJNIEnv];
 338     [self.javaPlatformWindow setJObject:nil withEnv:env];
 339 
 340     self.nsWindow = nil;
 341 
 342     [super dealloc];
 343 }
 344 
 345 // NSWindow overrides
 346 - (BOOL) canBecomeKeyWindow {
 347 AWT_ASSERT_APPKIT_THREAD;
 348     return self.isEnabled && IS(self.styleBits, SHOULD_BECOME_KEY);
 349 }
 350 
 351 - (BOOL) canBecomeMainWindow {
 352 AWT_ASSERT_APPKIT_THREAD;
 353     return self.isEnabled && IS(self.styleBits, SHOULD_BECOME_MAIN);


1103 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSynthesizeMouseEnteredExitedEvents
1104 (JNIEnv *env, jclass clazz)
1105 {
1106     JNF_COCOA_ENTER(env);
1107     AWT_ASSERT_NOT_APPKIT_THREAD;
1108 
1109     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
1110         AWT_ASSERT_APPKIT_THREAD;
1111         [AWTWindow synthesizeMouseEnteredExitedEventsForAllWindows];
1112     }];
1113 
1114     JNF_COCOA_EXIT(env);
1115 }
1116 
1117 /*
1118  * Class:     sun_lwawt_macosx_CPlatformWindow
1119  * Method:    nativeGetDisplayID_AppKitThread
1120  * Signature: (J)I
1121  */
1122 JNIEXPORT jint JNICALL
1123 Java_sun_lwawt_macosx_CPlatformWindow_nativeGetNSWindowDisplayID
1124 (JNIEnv *env, jclass clazz, jlong windowPtr)
1125 {
1126     __block jint ret; // CGDirectDisplayID
1127 
1128 JNF_COCOA_ENTER(env);

1129 
1130     NSWindow *window = OBJC(windowPtr);
1131 
1132     if ([NSThread isMainThread]) {
1133         ret = (jint)[[AWTWindow getNSWindowDisplayID_AppKitThread: window] intValue];
1134     } else {
1135         [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){
1136             ret = (jint)[[AWTWindow getNSWindowDisplayID_AppKitThread: window] intValue];
1137         }];
1138     }
1139 
1140 JNF_COCOA_EXIT(env);
1141 
1142     return ret;
1143 }
1144 
1145 /*
1146  * Class:     sun_lwawt_macosx_CPlatformWindow
1147  * Method:    _toggleFullScreenMode
1148  * Signature: (J)V
1149  */
1150 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow__1toggleFullScreenMode
1151 (JNIEnv *env, jobject peer, jlong windowPtr)
1152 {
1153 JNF_COCOA_ENTER(env);
1154 
1155     NSWindow *nsWindow = OBJC(windowPtr);
1156     SEL toggleFullScreenSelector = @selector(toggleFullScreen:);
1157     if (![nsWindow respondsToSelector:toggleFullScreenSelector]) return;
1158