7175707: [macosx] PIT: 8 b43 Not running on AppKit thread issue again
Reviewed-by: serb, anthony
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Thu Oct 18 17:50:43 2012 +0400
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Thu Oct 18 18:28:42 2012 +0400
@@ -65,7 +65,7 @@
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 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
--- a/jdk/src/macosx/native/sun/awt/AWTWindow.m Thu Oct 18 17:50:43 2012 +0400
+++ b/jdk/src/macosx/native/sun/awt/AWTWindow.m Thu Oct 18 18:28:42 2012 +0400
@@ -324,6 +324,13 @@
}
}
++ (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 @@
* 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);