diff --git a/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java b/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java index 15502d1f8d767ca92973be12881c5d5f737f9840..6146ca255760e1934cf517371ab4cdd5bd1c9ff0 100644 --- a/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java +++ b/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java @@ -65,7 +65,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo private static native void nativeDispose(long nsWindowPtr); private static native CPlatformWindow nativeGetTopmostPlatformWindowUnderMouse(); - private static native int nativeGetNSWindowDisplayID_AppKitThread(long nsWindowPtr); + private static native int nativeGetNSWindowDisplayID(long nsWindowPtr); // Loger to report issues happened during execution but that do not affect functionality private static final PlatformLogger logger = PlatformLogger.getLogger("sun.lwawt.macosx.CPlatformWindow"); @@ -444,7 +444,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo public GraphicsDevice getGraphicsDevice() { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); CGraphicsEnvironment cge = (CGraphicsEnvironment)ge; - int displayID = nativeGetNSWindowDisplayID_AppKitThread(getNSWindowPtr()); + int displayID = nativeGetNSWindowDisplayID(getNSWindowPtr()); GraphicsDevice gd = cge.getScreenDevice(displayID); if (gd == null) { // this could possibly happen during device removal diff --git a/src/macosx/native/sun/awt/AWTWindow.m b/src/macosx/native/sun/awt/AWTWindow.m index 2e2b854f35b7930ae7dc871baf51c4346a7ca453..f2958e388943e852ab6d04a2e0027a969041d349 100644 --- a/src/macosx/native/sun/awt/AWTWindow.m +++ b/src/macosx/native/sun/awt/AWTWindow.m @@ -324,6 +324,13 @@ AWT_ASSERT_APPKIT_THREAD; } } ++ (NSNumber *) getNSWindowDisplayID_AppKitThread:(NSWindow *)window { + AWT_ASSERT_APPKIT_THREAD; + NSScreen *screen = [window screen]; + NSDictionary *deviceDescription = [screen deviceDescription]; + return [deviceDescription objectForKey:@"NSScreenNumber"]; +} + - (void) dealloc { AWT_ASSERT_APPKIT_THREAD; @@ -1113,19 +1120,22 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSynthesizeMou * Signature: (J)I */ JNIEXPORT jint JNICALL -Java_sun_lwawt_macosx_CPlatformWindow_nativeGetNSWindowDisplayID_1AppKitThread +Java_sun_lwawt_macosx_CPlatformWindow_nativeGetNSWindowDisplayID (JNIEnv *env, jclass clazz, jlong windowPtr) { - jint ret; // CGDirectDisplayID + __block jint ret; // CGDirectDisplayID JNF_COCOA_ENTER(env); -AWT_ASSERT_APPKIT_THREAD; NSWindow *window = OBJC(windowPtr); - NSScreen *screen = [window screen]; - NSDictionary *deviceDescription = [screen deviceDescription]; - NSNumber *displayID = [deviceDescription objectForKey:@"NSScreenNumber"]; - ret = (jint)[displayID intValue]; + + if ([NSThread isMainThread]) { + ret = (jint)[[AWTWindow getNSWindowDisplayID_AppKitThread: window] intValue]; + } else { + [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ + ret = (jint)[[AWTWindow getNSWindowDisplayID_AppKitThread: window] intValue]; + }]; + } JNF_COCOA_EXIT(env);