提交 131df267 编写于 作者: S serb

7179050: [macosx] Make LWAWT be able to run on AppKit thread

Summary: Removed irrelevant assertions from the LWAWT native methods
Reviewed-by: serb, anthony
Contributed-by: petr.pchelko@oracle.com
上级 2ddc345b
...@@ -58,7 +58,6 @@ public final class CPlatformWindow extends CFRetainedResource implements Platfor ...@@ -58,7 +58,6 @@ public final class CPlatformWindow extends CFRetainedResource implements Platfor
private static native void nativeRevalidateNSWindowShadow(long nsWindowPtr); private static native void nativeRevalidateNSWindowShadow(long nsWindowPtr);
private static native void nativeSetNSWindowMinimizedIcon(long nsWindowPtr, long nsImage); private static native void nativeSetNSWindowMinimizedIcon(long nsWindowPtr, long nsImage);
private static native void nativeSetNSWindowRepresentedFilename(long nsWindowPtr, String representedFilename); private static native void nativeSetNSWindowRepresentedFilename(long nsWindowPtr, String representedFilename);
private static native void nativeSetNSWindowSecurityWarningPositioning(long nsWindowPtr, double x, double y, float biasX, float biasY);
private static native void nativeSetEnabled(long nsWindowPtr, boolean isEnabled); private static native void nativeSetEnabled(long nsWindowPtr, boolean isEnabled);
private static native void nativeSynthesizeMouseEnteredExitedEvents(); private static native void nativeSynthesizeMouseEnteredExitedEvents();
private static native void nativeDispose(long nsWindowPtr); private static native void nativeDispose(long nsWindowPtr);
......
...@@ -101,8 +101,7 @@ Java_sun_lwawt_macosx_CPlatformComponent_nativeCreateComponent ...@@ -101,8 +101,7 @@ Java_sun_lwawt_macosx_CPlatformComponent_nativeCreateComponent
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
AWT_ASSERT_APPKIT_THREAD;
CALayer *windowLayer = jlong_to_ptr(windowLayerPtr); CALayer *windowLayer = jlong_to_ptr(windowLayerPtr);
surfaceLayers = [[AWTSurfaceLayers alloc] initWithWindowLayer: windowLayer]; surfaceLayers = [[AWTSurfaceLayers alloc] initWithWindowLayer: windowLayer];
CFRetain(surfaceLayers); CFRetain(surfaceLayers);
...@@ -127,7 +126,6 @@ JNF_COCOA_ENTER(env); ...@@ -127,7 +126,6 @@ JNF_COCOA_ENTER(env);
AWTSurfaceLayers *surfaceLayers = OBJC(surfaceLayersPtr); AWTSurfaceLayers *surfaceLayers = OBJC(surfaceLayersPtr);
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
CGRect rect = CGRectMake(x, y, width, height); CGRect rect = CGRectMake(x, y, width, height);
[surfaceLayers setBounds: rect]; [surfaceLayers setBounds: rect];
......
...@@ -1243,8 +1243,7 @@ JNF_COCOA_ENTER(env); ...@@ -1243,8 +1243,7 @@ JNF_COCOA_ENTER(env);
jobject cPlatformView = (*env)->NewGlobalRef(env, obj); jobject cPlatformView = (*env)->NewGlobalRef(env, obj);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
AWT_ASSERT_APPKIT_THREAD;
CALayer *windowLayer = jlong_to_ptr(windowLayerPtr); CALayer *windowLayer = jlong_to_ptr(windowLayerPtr);
AWTView *view = [[AWTView alloc] initWithRect:rect AWTView *view = [[AWTView alloc] initWithRect:rect
platformView:cPlatformView platformView:cPlatformView
...@@ -1274,8 +1273,7 @@ JNF_COCOA_ENTER(env); ...@@ -1274,8 +1273,7 @@ JNF_COCOA_ENTER(env);
NSView *view = (NSView *)jlong_to_ptr(viewPtr); NSView *view = (NSView *)jlong_to_ptr(viewPtr);
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
if (toResize) { if (toResize) {
[view setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable]; [view setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable];
} else { } else {
...@@ -1308,8 +1306,7 @@ JNF_COCOA_ENTER(env); ...@@ -1308,8 +1306,7 @@ JNF_COCOA_ENTER(env);
NSWindow *window = [view window]; NSWindow *window = [view window];
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
AWT_ASSERT_APPKIT_THREAD;
ret = (jint)[[AWTWindow getNSWindowDisplayID_AppKitThread: window] intValue]; ret = (jint)[[AWTWindow getNSWindowDisplayID_AppKitThread: window] intValue];
}]; }];
...@@ -1336,8 +1333,7 @@ JNF_COCOA_ENTER(env); ...@@ -1336,8 +1333,7 @@ JNF_COCOA_ENTER(env);
NSView *view = (NSView *)jlong_to_ptr(viewPtr); NSView *view = (NSView *)jlong_to_ptr(viewPtr);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
AWT_ASSERT_APPKIT_THREAD;
NSRect viewBounds = [view bounds]; NSRect viewBounds = [view bounds];
NSRect frameInWindow = [view convertRect:viewBounds toView:nil]; NSRect frameInWindow = [view convertRect:viewBounds toView:nil];
rect = [[view window] convertRectToScreen:frameInWindow]; rect = [[view window] convertRectToScreen:frameInWindow];
...@@ -1366,9 +1362,7 @@ JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_CPlatformView_nativeIsViewUnder ...@@ -1366,9 +1362,7 @@ JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_CPlatformView_nativeIsViewUnder
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSView *nsView = OBJC(viewPtr); NSView *nsView = OBJC(viewPtr);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
AWT_ASSERT_APPKIT_THREAD;
NSPoint ptWindowCoords = [[nsView window] mouseLocationOutsideOfEventStream]; NSPoint ptWindowCoords = [[nsView window] mouseLocationOutsideOfEventStream];
NSPoint ptViewCoords = [nsView convertPoint:ptWindowCoords fromView:nil]; NSPoint ptViewCoords = [nsView convertPoint:ptWindowCoords fromView:nil];
underMouse = [nsView hitTest:ptViewCoords] != nil; underMouse = [nsView hitTest:ptViewCoords] != nil;
......
...@@ -738,14 +738,12 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeCreateNSWind ...@@ -738,14 +738,12 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeCreateNSWind
__block AWTWindow *window = nil; __block AWTWindow *window = nil;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
JNFWeakJObjectWrapper *platformWindow = [JNFWeakJObjectWrapper wrapperWithJObject:obj withEnv:env]; JNFWeakJObjectWrapper *platformWindow = [JNFWeakJObjectWrapper wrapperWithJObject:obj withEnv:env];
NSView *contentView = OBJC(contentViewPtr); NSView *contentView = OBJC(contentViewPtr);
NSRect frameRect = NSMakeRect(x, y, w, h); NSRect frameRect = NSMakeRect(x, y, w, h);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
AWT_ASSERT_APPKIT_THREAD;
window = [[AWTWindow alloc] initWithPlatformWindow:platformWindow window = [[AWTWindow alloc] initWithPlatformWindow:platformWindow
styleBits:styleBits styleBits:styleBits
...@@ -770,11 +768,9 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowSt ...@@ -770,11 +768,9 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowSt
(JNIEnv *env, jclass clazz, jlong windowPtr, jint mask, jint bits) (JNIEnv *env, jclass clazz, jlong windowPtr, jint mask, jint bits)
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
NSWindow *nsWindow = OBJC(windowPtr); NSWindow *nsWindow = OBJC(windowPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
AWTWindow *window = (AWTWindow*)[nsWindow delegate]; AWTWindow *window = (AWTWindow*)[nsWindow delegate];
...@@ -807,12 +803,10 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowMe ...@@ -807,12 +803,10 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowMe
(JNIEnv *env, jclass clazz, jlong windowPtr, jlong menuBarPtr) (JNIEnv *env, jclass clazz, jlong windowPtr, jlong menuBarPtr)
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
NSWindow *nsWindow = OBJC(windowPtr); NSWindow *nsWindow = OBJC(windowPtr);
CMenuBar *menuBar = OBJC(menuBarPtr); CMenuBar *menuBar = OBJC(menuBarPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
AWTWindow *window = (AWTWindow*)[nsWindow delegate]; AWTWindow *window = (AWTWindow*)[nsWindow delegate];
...@@ -838,14 +832,12 @@ JNIEXPORT jobject JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeGetNSWindo ...@@ -838,14 +832,12 @@ JNIEXPORT jobject JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeGetNSWindo
jobject ret = NULL; jobject ret = NULL;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
NSWindow *nsWindow = OBJC(windowPtr); NSWindow *nsWindow = OBJC(windowPtr);
__block NSRect contentRect = NSZeroRect; __block NSRect contentRect = NSZeroRect;
__block NSRect frame = NSZeroRect; __block NSRect frame = NSZeroRect;
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
AWT_ASSERT_APPKIT_THREAD;
frame = [nsWindow frame]; frame = [nsWindow frame];
contentRect = [NSWindow contentRectForFrameRect:frame styleMask:[nsWindow styleMask]]; contentRect = [NSWindow contentRectForFrameRect:frame styleMask:[nsWindow styleMask]];
...@@ -873,14 +865,12 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowBo ...@@ -873,14 +865,12 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowBo
(JNIEnv *env, jclass clazz, jlong windowPtr, jdouble originX, jdouble originY, jdouble width, jdouble height) (JNIEnv *env, jclass clazz, jlong windowPtr, jdouble originX, jdouble originY, jdouble width, jdouble height)
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
NSRect jrect = NSMakeRect(originX, originY, width, height); NSRect jrect = NSMakeRect(originX, originY, width, height);
// TODO: not sure we need displayIfNeeded message in our view // TODO: not sure we need displayIfNeeded message in our view
NSWindow *nsWindow = OBJC(windowPtr); NSWindow *nsWindow = OBJC(windowPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
AWTWindow *window = (AWTWindow*)[nsWindow delegate]; AWTWindow *window = (AWTWindow*)[nsWindow delegate];
...@@ -913,7 +903,6 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowMi ...@@ -913,7 +903,6 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowMi
(JNIEnv *env, jclass clazz, jlong windowPtr, jdouble minW, jdouble minH, jdouble maxW, jdouble maxH) (JNIEnv *env, jclass clazz, jlong windowPtr, jdouble minW, jdouble minH, jdouble maxW, jdouble maxH)
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
if (minW < 1) minW = 1; if (minW < 1) minW = 1;
if (minH < 1) minH = 1; if (minH < 1) minH = 1;
...@@ -921,8 +910,7 @@ AWT_ASSERT_NOT_APPKIT_THREAD; ...@@ -921,8 +910,7 @@ AWT_ASSERT_NOT_APPKIT_THREAD;
if (maxH < 1) maxH = 1; if (maxH < 1) maxH = 1;
NSWindow *nsWindow = OBJC(windowPtr); NSWindow *nsWindow = OBJC(windowPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
AWTWindow *window = (AWTWindow*)[nsWindow delegate]; AWTWindow *window = (AWTWindow*)[nsWindow delegate];
...@@ -949,12 +937,9 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativePushNSWindowT ...@@ -949,12 +937,9 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativePushNSWindowT
(JNIEnv *env, jclass clazz, jlong windowPtr) (JNIEnv *env, jclass clazz, jlong windowPtr)
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
NSWindow *nsWindow = OBJC(windowPtr); NSWindow *nsWindow = OBJC(windowPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
[nsWindow orderBack:nil]; [nsWindow orderBack:nil];
}]; }];
...@@ -970,11 +955,9 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativePushNSWindowT ...@@ -970,11 +955,9 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativePushNSWindowT
(JNIEnv *env, jclass clazz, jlong windowPtr) (JNIEnv *env, jclass clazz, jlong windowPtr)
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
NSWindow *nsWindow = OBJC(windowPtr); NSWindow *nsWindow = OBJC(windowPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
if (![nsWindow isKeyWindow]) { if (![nsWindow isKeyWindow]) {
[nsWindow makeKeyAndOrderFront:nsWindow]; [nsWindow makeKeyAndOrderFront:nsWindow];
...@@ -995,7 +978,6 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowTi ...@@ -995,7 +978,6 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowTi
(JNIEnv *env, jclass clazz, jlong windowPtr, jstring jtitle) (JNIEnv *env, jclass clazz, jlong windowPtr, jstring jtitle)
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
NSWindow *nsWindow = OBJC(windowPtr); NSWindow *nsWindow = OBJC(windowPtr);
[nsWindow performSelectorOnMainThread:@selector(setTitle:) [nsWindow performSelectorOnMainThread:@selector(setTitle:)
...@@ -1016,15 +998,9 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeRevalidateNSW ...@@ -1016,15 +998,9 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeRevalidateNSW
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSWindow *nsWindow = OBJC(windowPtr); NSWindow *nsWindow = OBJC(windowPtr);
if ([NSThread isMainThread]) { [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[nsWindow invalidateShadow]; [nsWindow invalidateShadow];
} else { }];
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
AWT_ASSERT_APPKIT_THREAD;
[nsWindow invalidateShadow];
}];
}
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
...@@ -1060,13 +1036,10 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowMi ...@@ -1060,13 +1036,10 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowMi
(JNIEnv *env, jclass clazz, jlong windowPtr, jlong nsImagePtr) (JNIEnv *env, jclass clazz, jlong windowPtr, jlong nsImagePtr)
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
NSWindow *nsWindow = OBJC(windowPtr); NSWindow *nsWindow = OBJC(windowPtr);
NSImage *image = OBJC(nsImagePtr); NSImage *image = OBJC(nsImagePtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
[nsWindow setMiniwindowImage:image]; [nsWindow setMiniwindowImage:image];
}]; }];
...@@ -1082,35 +1055,16 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowRe ...@@ -1082,35 +1055,16 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowRe
(JNIEnv *env, jclass clazz, jlong windowPtr, jstring filename) (JNIEnv *env, jclass clazz, jlong windowPtr, jstring filename)
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
NSWindow *nsWindow = OBJC(windowPtr); NSWindow *nsWindow = OBJC(windowPtr);
NSURL *url = (filename == NULL) ? nil : [NSURL fileURLWithPath:JNFNormalizedNSStringForPath(env, filename)]; NSURL *url = (filename == NULL) ? nil : [NSURL fileURLWithPath:JNFNormalizedNSStringForPath(env, filename)];
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
[nsWindow setRepresentedURL:url]; [nsWindow setRepresentedURL:url];
}]; }];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
/*
* Class: sun_lwawt_macosx_CPlatformWindow
* Method: nativeSetNSWindowSecurityWarningPositioning
* Signature: (JDDFF)V
*/
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowSecurityWarningPositioning
(JNIEnv *env, jclass clazz, jlong windowPtr, jdouble x, jdouble y, jfloat biasX, jfloat biasY)
{
JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
[JNFException raise:env as:kRuntimeException reason:"unimplemented"];
JNF_COCOA_EXIT(env);
}
/* /*
* Class: sun_lwawt_macosx_CPlatformWindow * Class: sun_lwawt_macosx_CPlatformWindow
* Method: nativeGetTopmostPlatformWindowUnderMouse * Method: nativeGetTopmostPlatformWindowUnderMouse
...@@ -1144,10 +1098,8 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSynthesizeMou ...@@ -1144,10 +1098,8 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSynthesizeMou
(JNIEnv *env, jclass clazz) (JNIEnv *env, jclass clazz)
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
[AWTWindow synthesizeMouseEnteredExitedEventsForAllWindows]; [AWTWindow synthesizeMouseEnteredExitedEventsForAllWindows];
}]; }];
...@@ -1168,7 +1120,7 @@ JNF_COCOA_ENTER(env); ...@@ -1168,7 +1120,7 @@ JNF_COCOA_ENTER(env);
SEL toggleFullScreenSelector = @selector(toggleFullScreen:); SEL toggleFullScreenSelector = @selector(toggleFullScreen:);
if (![nsWindow respondsToSelector:toggleFullScreenSelector]) return; if (![nsWindow respondsToSelector:toggleFullScreenSelector]) return;
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[nsWindow performSelector:toggleFullScreenSelector withObject:nil]; [nsWindow performSelector:toggleFullScreenSelector withObject:nil];
}]; }];
...@@ -1181,7 +1133,7 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetEnabled ...@@ -1181,7 +1133,7 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetEnabled
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSWindow *nsWindow = OBJC(windowPtr); NSWindow *nsWindow = OBJC(windowPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWTWindow *window = (AWTWindow*)[nsWindow delegate]; AWTWindow *window = (AWTWindow*)[nsWindow delegate];
[window setEnabled: isEnabled]; [window setEnabled: isEnabled];
...@@ -1196,7 +1148,7 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeDispose ...@@ -1196,7 +1148,7 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeDispose
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSWindow *nsWindow = OBJC(windowPtr); NSWindow *nsWindow = OBJC(windowPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWTWindow *window = (AWTWindow*)[nsWindow delegate]; AWTWindow *window = (AWTWindow*)[nsWindow delegate];
if ([AWTWindow lastKeyWindow] == window) { if ([AWTWindow lastKeyWindow] == window) {
......
...@@ -515,10 +515,9 @@ AWT_ASSERT_APPKIT_THREAD; ...@@ -515,10 +515,9 @@ AWT_ASSERT_APPKIT_THREAD;
JNIEXPORT void JNICALL Java_com_apple_eawt_Application_nativeInitializeApplicationDelegate JNIEXPORT void JNICALL Java_com_apple_eawt_Application_nativeInitializeApplicationDelegate
(JNIEnv *env, jclass clz) (JNIEnv *env, jclass clz)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
// Force initialization to happen on AppKit thread! // Force initialization to happen on AppKit thread!
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[ApplicationDelegate sharedDelegate]; [ApplicationDelegate sharedDelegate];
}]; }];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
...@@ -532,10 +531,9 @@ JNF_COCOA_EXIT(env); ...@@ -532,10 +531,9 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_com_apple_eawt__1AppEventHandler_nativeOpenCocoaAboutWindow JNIEXPORT void JNICALL Java_com_apple_eawt__1AppEventHandler_nativeOpenCocoaAboutWindow
(JNIEnv *env, jclass clz) (JNIEnv *env, jclass clz)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[NSApp orderFrontStandardAboutPanel:nil]; [NSApp orderFrontStandardAboutPanel:nil];
}]; }];
...@@ -550,10 +548,9 @@ JNF_COCOA_EXIT(env); ...@@ -550,10 +548,9 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_com_apple_eawt__1AppEventHandler_nativeReplyToAppShouldTerminate JNIEXPORT void JNICALL Java_com_apple_eawt__1AppEventHandler_nativeReplyToAppShouldTerminate
(JNIEnv *env, jclass clz, jboolean doTerminate) (JNIEnv *env, jclass clz, jboolean doTerminate)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[NSApp replyToApplicationShouldTerminate:doTerminate]; [NSApp replyToApplicationShouldTerminate:doTerminate];
}]; }];
...@@ -568,7 +565,6 @@ JNF_COCOA_EXIT(env); ...@@ -568,7 +565,6 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_com_apple_eawt__1AppEventHandler_nativeRegisterForNotification JNIEXPORT void JNICALL Java_com_apple_eawt__1AppEventHandler_nativeRegisterForNotification
(JNIEnv *env, jclass clz, jint notificationType) (JNIEnv *env, jclass clz, jint notificationType)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[ThreadUtilities performOnMainThread:@selector(_registerForNotification:) [ThreadUtilities performOnMainThread:@selector(_registerForNotification:)
onObject:[ApplicationDelegate class] onObject:[ApplicationDelegate class]
...@@ -586,13 +582,10 @@ JNF_COCOA_EXIT(env); ...@@ -586,13 +582,10 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_com_apple_eawt__1AppDockIconHandler_nativeSetDockMenu JNIEXPORT void JNICALL Java_com_apple_eawt__1AppDockIconHandler_nativeSetDockMenu
(JNIEnv *env, jclass clz, jlong nsMenuPtr) (JNIEnv *env, jclass clz, jlong nsMenuPtr)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSMenu *menu = (NSMenu *)jlong_to_ptr(nsMenuPtr); NSMenu *menu = (NSMenu *)jlong_to_ptr(nsMenuPtr);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
AWT_ASSERT_APPKIT_THREAD;
[ApplicationDelegate sharedDelegate].fDockMenu = menu; [ApplicationDelegate sharedDelegate].fDockMenu = menu;
}]; }];
...@@ -607,14 +600,13 @@ JNF_COCOA_EXIT(env); ...@@ -607,14 +600,13 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_com_apple_eawt__1AppDockIconHandler_nativeSetDockIconImage JNIEXPORT void JNICALL Java_com_apple_eawt__1AppDockIconHandler_nativeSetDockIconImage
(JNIEnv *env, jclass clz, jlong nsImagePtr) (JNIEnv *env, jclass clz, jlong nsImagePtr)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSImage *_image = (NSImage *)jlong_to_ptr(nsImagePtr); NSImage *_image = (NSImage *)jlong_to_ptr(nsImagePtr);
[JNFRunLoop performOnMainThread:@selector(_setDockIconImage:) [ThreadUtilities performOnMainThread:@selector(_setDockIconImage:)
on:[ApplicationDelegate class] on:[ApplicationDelegate class]
withObject:_image withObject:_image
waitUntilDone:NO]; waitUntilDone:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
...@@ -629,12 +621,9 @@ JNIEXPORT jlong JNICALL Java_com_apple_eawt__1AppDockIconHandler_nativeGetDockIc ...@@ -629,12 +621,9 @@ JNIEXPORT jlong JNICALL Java_com_apple_eawt__1AppDockIconHandler_nativeGetDockIc
{ {
__block NSImage *image = nil; __block NSImage *image = nil;
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
AWT_ASSERT_APPKIT_THREAD;
image = [ApplicationDelegate _dockIconImage]; image = [ApplicationDelegate _dockIconImage];
CFRetain(image); CFRetain(image);
}]; }];
...@@ -652,13 +641,10 @@ JNF_COCOA_EXIT(env); ...@@ -652,13 +641,10 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_com_apple_eawt__1AppDockIconHandler_nativeSetDockIconBadge JNIEXPORT void JNICALL Java_com_apple_eawt__1AppDockIconHandler_nativeSetDockIconBadge
(JNIEnv *env, jclass clz, jstring badge) (JNIEnv *env, jclass clz, jstring badge)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSString *badgeString = JNFJavaToNSString(env, badge); NSString *badgeString = JNFJavaToNSString(env, badge);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
NSDockTile *dockTile = [NSApp dockTile]; NSDockTile *dockTile = [NSApp dockTile];
[dockTile setBadgeLabel:badgeString]; [dockTile setBadgeLabel:badgeString];
[dockTile display]; [dockTile display];
...@@ -675,12 +661,9 @@ JNF_COCOA_EXIT(env); ...@@ -675,12 +661,9 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_com_apple_eawt__1AppMiscHandlers_nativeRequestActivation JNIEXPORT void JNICALL Java_com_apple_eawt__1AppMiscHandlers_nativeRequestActivation
(JNIEnv *env, jclass clz, jboolean allWindows) (JNIEnv *env, jclass clz, jboolean allWindows)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
NSApplicationActivationOptions options = allWindows ? NSApplicationActivateAllWindows : 0; NSApplicationActivationOptions options = allWindows ? NSApplicationActivateAllWindows : 0;
options |= NSApplicationActivateIgnoringOtherApps; // without this, nothing happens! options |= NSApplicationActivateIgnoringOtherApps; // without this, nothing happens!
[[NSRunningApplication currentApplication] activateWithOptions:options]; [[NSRunningApplication currentApplication] activateWithOptions:options];
...@@ -697,12 +680,9 @@ JNF_COCOA_EXIT(env); ...@@ -697,12 +680,9 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_com_apple_eawt__1AppMiscHandlers_nativeRequestUserAttention JNIEXPORT void JNICALL Java_com_apple_eawt__1AppMiscHandlers_nativeRequestUserAttention
(JNIEnv *env, jclass clz, jboolean critical) (JNIEnv *env, jclass clz, jboolean critical)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
[NSApp requestUserAttention:critical ? NSCriticalRequest : NSInformationalRequest]; [NSApp requestUserAttention:critical ? NSCriticalRequest : NSInformationalRequest];
}]; }];
...@@ -717,13 +697,12 @@ JNF_COCOA_EXIT(env); ...@@ -717,13 +697,12 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_com_apple_eawt__1AppMiscHandlers_nativeOpenHelpViewer JNIEXPORT void JNICALL Java_com_apple_eawt__1AppMiscHandlers_nativeOpenHelpViewer
(JNIEnv *env, jclass clz) (JNIEnv *env, jclass clz)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[JNFRunLoop performOnMainThread:@selector(showHelp:) [ThreadUtilities performOnMainThread:@selector(showHelp:)
on:NSApp on:NSApp
withObject:nil withObject:nil
waitUntilDone:NO]; waitUntilDone:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
...@@ -736,7 +715,6 @@ JNF_COCOA_EXIT(env); ...@@ -736,7 +715,6 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_com_apple_eawt__1AppMiscHandlers_nativeEnableSuddenTermination JNIEXPORT void JNICALL Java_com_apple_eawt__1AppMiscHandlers_nativeEnableSuddenTermination
(JNIEnv *env, jclass clz) (JNIEnv *env, jclass clz)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[[NSProcessInfo processInfo] enableSuddenTermination]; // Foundation thread-safe [[NSProcessInfo processInfo] enableSuddenTermination]; // Foundation thread-safe
...@@ -752,7 +730,6 @@ JNF_COCOA_EXIT(env); ...@@ -752,7 +730,6 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_com_apple_eawt__1AppMiscHandlers_nativeDisableSuddenTermination JNIEXPORT void JNICALL Java_com_apple_eawt__1AppMiscHandlers_nativeDisableSuddenTermination
(JNIEnv *env, jclass clz) (JNIEnv *env, jclass clz)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[[NSProcessInfo processInfo] disableSuddenTermination]; // Foundation thread-safe [[NSProcessInfo processInfo] disableSuddenTermination]; // Foundation thread-safe
...@@ -768,12 +745,9 @@ JNF_COCOA_EXIT(env); ...@@ -768,12 +745,9 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_com_apple_eawt__1AppMenuBarHandler_nativeSetMenuState JNIEXPORT void JNICALL Java_com_apple_eawt__1AppMenuBarHandler_nativeSetMenuState
(JNIEnv *env, jclass clz, jint menuID, jboolean visible, jboolean enabled) (JNIEnv *env, jclass clz, jint menuID, jboolean visible, jboolean enabled)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
ApplicationDelegate *delegate = [ApplicationDelegate sharedDelegate]; ApplicationDelegate *delegate = [ApplicationDelegate sharedDelegate];
switch (menuID) { switch (menuID) {
case com_apple_eawt__AppMenuBarHandler_MENU_ABOUT: case com_apple_eawt__AppMenuBarHandler_MENU_ABOUT:
...@@ -796,12 +770,10 @@ JNF_COCOA_EXIT(env); ...@@ -796,12 +770,10 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_com_apple_eawt__1AppMenuBarHandler_nativeSetDefaultMenuBar JNIEXPORT void JNICALL Java_com_apple_eawt__1AppMenuBarHandler_nativeSetDefaultMenuBar
(JNIEnv *env, jclass clz, jlong cMenuBarPtr) (JNIEnv *env, jclass clz, jlong cMenuBarPtr)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
CMenuBar *menu = (CMenuBar *)jlong_to_ptr(cMenuBarPtr); CMenuBar *menu = (CMenuBar *)jlong_to_ptr(cMenuBarPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
[ApplicationDelegate sharedDelegate].fDefaultMenuBar = menu; [ApplicationDelegate sharedDelegate].fDefaultMenuBar = menu;
}]; }];
......
...@@ -109,7 +109,6 @@ static CClipboard *sClipboard = nil; ...@@ -109,7 +109,6 @@ static CClipboard *sClipboard = nil;
} }
- (void) javaDeclareTypes:(NSArray *)inTypes withOwner:(jobject)inClipboard jniEnv:(JNIEnv *)inEnv { - (void) javaDeclareTypes:(NSArray *)inTypes withOwner:(jobject)inClipboard jniEnv:(JNIEnv *)inEnv {
AWT_ASSERT_NOT_APPKIT_THREAD;
//NSLog(@"CClipboard javaDeclareTypes %@ withOwner", inTypes); //NSLog(@"CClipboard javaDeclareTypes %@ withOwner", inTypes);
...@@ -134,7 +133,6 @@ static CClipboard *sClipboard = nil; ...@@ -134,7 +133,6 @@ static CClipboard *sClipboard = nil;
- (NSArray *) javaGetTypes { - (NSArray *) javaGetTypes {
AWT_ASSERT_NOT_APPKIT_THREAD;
NSMutableArray *args = [NSMutableArray arrayWithCapacity:1]; NSMutableArray *args = [NSMutableArray arrayWithCapacity:1];
[ThreadUtilities performOnMainThread:@selector(_nativeGetTypes:) onObject:self withObject:args waitUntilDone:YES awtMode:YES]; [ThreadUtilities performOnMainThread:@selector(_nativeGetTypes:) onObject:self withObject:args waitUntilDone:YES awtMode:YES];
...@@ -152,7 +150,6 @@ static CClipboard *sClipboard = nil; ...@@ -152,7 +150,6 @@ static CClipboard *sClipboard = nil;
} }
- (void) javaSetData:(NSData *)inData forType:(NSString *) inFormat { - (void) javaSetData:(NSData *)inData forType:(NSString *) inFormat {
AWT_ASSERT_NOT_APPKIT_THREAD;
CClipboardUpdate *newUpdate = [[CClipboardUpdate alloc] initWithData:inData withFormat:inFormat]; CClipboardUpdate *newUpdate = [[CClipboardUpdate alloc] initWithData:inData withFormat:inFormat];
[ThreadUtilities performOnMainThread:@selector(_nativeSetData:) onObject:self withObject:newUpdate waitUntilDone:YES awtMode:YES]; [ThreadUtilities performOnMainThread:@selector(_nativeSetData:) onObject:self withObject:newUpdate waitUntilDone:YES awtMode:YES];
...@@ -171,7 +168,6 @@ static CClipboard *sClipboard = nil; ...@@ -171,7 +168,6 @@ static CClipboard *sClipboard = nil;
} }
- (NSData *) javaGetDataForType:(NSString *) inFormat { - (NSData *) javaGetDataForType:(NSString *) inFormat {
AWT_ASSERT_NOT_APPKIT_THREAD;
NSMutableArray *args = [NSMutableArray arrayWithObject:inFormat]; NSMutableArray *args = [NSMutableArray arrayWithObject:inFormat];
[ThreadUtilities performOnMainThread:@selector(_nativeGetDataForType:) onObject:self withObject:args waitUntilDone:YES awtMode:YES]; [ThreadUtilities performOnMainThread:@selector(_nativeGetDataForType:) onObject:self withObject:args waitUntilDone:YES awtMode:YES];
......
...@@ -74,7 +74,6 @@ Java_sun_lwawt_macosx_CCursorManager_nativeSetBuiltInCursor ...@@ -74,7 +74,6 @@ Java_sun_lwawt_macosx_CCursorManager_nativeSetBuiltInCursor
(JNIEnv *env, jclass class, jint type, jstring name) (JNIEnv *env, jclass class, jint type, jstring name)
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
NSString *cursorName = JNFJavaToNSString(env, name); NSString *cursorName = JNFJavaToNSString(env, name);
SEL cursorSelector = (type == sun_lwawt_macosx_CCursorManager_NAMED_CURSOR) ? lookupCursorSelectorForName(cursorName) : lookupCursorSelectorForType(type); SEL cursorSelector = (type == sun_lwawt_macosx_CCursorManager_NAMED_CURSOR) ? lookupCursorSelectorForName(cursorName) : lookupCursorSelectorForType(type);
...@@ -87,9 +86,7 @@ AWT_ASSERT_NOT_APPKIT_THREAD; ...@@ -87,9 +86,7 @@ AWT_ASSERT_NOT_APPKIT_THREAD;
[JNFException raise:env as:kNoSuchMethodException reason:"missing NSCursor selector"]; [JNFException raise:env as:kNoSuchMethodException reason:"missing NSCursor selector"];
} }
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
setCursorOnAppKitThread([[NSCursor class] performSelector:cursorSelector]); setCursorOnAppKitThread([[NSCursor class] performSelector:cursorSelector]);
}]; }];
...@@ -101,12 +98,9 @@ Java_sun_lwawt_macosx_CCursorManager_nativeSetCustomCursor ...@@ -101,12 +98,9 @@ Java_sun_lwawt_macosx_CCursorManager_nativeSetCustomCursor
(JNIEnv *env, jclass class, jlong imgPtr, jdouble x, jdouble y) (JNIEnv *env, jclass class, jlong imgPtr, jdouble x, jdouble y)
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
NSImage *image = (NSImage *)jlong_to_ptr(imgPtr); NSImage *image = (NSImage *)jlong_to_ptr(imgPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
AWT_ASSERT_APPKIT_THREAD;
NSCursor *cursor = [[NSCursor alloc] initWithImage:image NSCursor *cursor = [[NSCursor alloc] initWithImage:image
hotSpot:(NSPoint){ x, y }]; hotSpot:(NSPoint){ x, y }];
setCursorOnAppKitThread(cursor); setCursorOnAppKitThread(cursor);
...@@ -127,8 +121,6 @@ JNF_COCOA_ENTER(env); ...@@ -127,8 +121,6 @@ JNF_COCOA_ENTER(env);
__block NSPoint pt = NSZeroPoint; __block NSPoint pt = NSZeroPoint;
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
AWT_ASSERT_APPKIT_THREAD;
pt = ConvertNSScreenPoint(env, [NSEvent mouseLocation]); pt = ConvertNSScreenPoint(env, [NSEvent mouseLocation]);
}]; }];
...@@ -144,13 +136,11 @@ JNIEXPORT void JNICALL ...@@ -144,13 +136,11 @@ JNIEXPORT void JNICALL
Java_sun_lwawt_macosx_CCursorManager_nativeSetAllowsCursorSetInBackground Java_sun_lwawt_macosx_CCursorManager_nativeSetAllowsCursorSetInBackground
(JNIEnv *env, jclass class, jboolean allows) (JNIEnv *env, jclass class, jboolean allows)
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
SEL allowsSetInBackground_SEL = @selector(javaSetAllowsCursorSetInBackground:); SEL allowsSetInBackground_SEL = @selector(javaSetAllowsCursorSetInBackground:);
if ([[NSCursor class] respondsToSelector:allowsSetInBackground_SEL]) { if ([[NSCursor class] respondsToSelector:allowsSetInBackground_SEL]) {
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
NSMethodSignature *allowsSetInBackground_sig = NSMethodSignature *allowsSetInBackground_sig =
[[NSCursor class] methodSignatureForSelector:allowsSetInBackground_SEL]; [[NSCursor class] methodSignatureForSelector:allowsSetInBackground_SEL];
NSInvocation *invocation = NSInvocation *invocation =
......
...@@ -36,8 +36,6 @@ ...@@ -36,8 +36,6 @@
JNIEXPORT jint JNICALL Java_sun_lwawt_macosx_CDesktopPeer__1lsOpenURI JNIEXPORT jint JNICALL Java_sun_lwawt_macosx_CDesktopPeer__1lsOpenURI
(JNIEnv *env, jclass clz, jstring uri) (JNIEnv *env, jclass clz, jstring uri)
{ {
// AWT_ASSERT_ANY_THREAD
OSStatus status = noErr; OSStatus status = noErr;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
...@@ -63,8 +61,6 @@ JNF_COCOA_EXIT(env); ...@@ -63,8 +61,6 @@ JNF_COCOA_EXIT(env);
JNIEXPORT jint JNICALL Java_sun_lwawt_macosx_CDesktopPeer__1lsOpenFile JNIEXPORT jint JNICALL Java_sun_lwawt_macosx_CDesktopPeer__1lsOpenFile
(JNIEnv *env, jclass clz, jstring jpath, jboolean print) (JNIEnv *env, jclass clz, jstring jpath, jboolean print)
{ {
// AWT_ASSERT_ANY_THREAD
OSStatus status = noErr; OSStatus status = noErr;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
......
...@@ -46,7 +46,7 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CDragSourceContextPeer_createNativ ...@@ -46,7 +46,7 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CDragSourceContextPeer_createNativ
__block CDragSource* dragSource = nil; __block CDragSource* dragSource = nil;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
dragSource = [[CDragSource alloc] init:jthis component:jcomponent peer:jpeer control:controlObj dragSource = [[CDragSource alloc] init:jthis component:jcomponent peer:jpeer control:controlObj
transferable:jtransferable triggerEvent:jtrigger dragPosX:jdragposx transferable:jtransferable triggerEvent:jtrigger dragPosX:jdragposx
dragPosY:jdragposy modifiers:jextmodifiers clickCount:jclickcount timeStamp:jtimestamp dragPosY:jdragposy modifiers:jextmodifiers clickCount:jclickcount timeStamp:jtimestamp
...@@ -103,7 +103,7 @@ JNF_COCOA_EXIT(env); ...@@ -103,7 +103,7 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CDragSourceContextPeer_setNativeCursor JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CDragSourceContextPeer_setNativeCursor
(JNIEnv *env, jobject jthis, jlong nativeDragSourceVal, jobject jcursor, jint jcursortype) (JNIEnv *env, jobject jthis, jlong nativeDragSourceVal, jobject jcursor, jint jcursortype)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD; //AWT_ASSERT_NOT_APPKIT_THREAD;
//JNF_COCOA_ENTER(env); //JNF_COCOA_ENTER(env);
// jobject gCursor = JNFNewGlobalRef(env, jcursor); // jobject gCursor = JNFNewGlobalRef(env, jcursor);
......
...@@ -108,7 +108,6 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromArra ...@@ -108,7 +108,6 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromArra
jlong result = 0L; jlong result = 0L;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_ANY_THREAD;
NSBitmapImageRep* imageRep = CImage_CreateImageRep(env, buffer, width, height); NSBitmapImageRep* imageRep = CImage_CreateImageRep(env, buffer, width, height);
if (imageRep) { if (imageRep) {
...@@ -139,7 +138,6 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromArra ...@@ -139,7 +138,6 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromArra
jlong result = 0L; jlong result = 0L;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_ANY_THREAD;
jsize num = (*env)->GetArrayLength(env, buffers); jsize num = (*env)->GetArrayLength(env, buffers);
NSMutableArray * reps = [NSMutableArray arrayWithCapacity: num]; NSMutableArray * reps = [NSMutableArray arrayWithCapacity: num];
...@@ -187,7 +185,6 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromIcon ...@@ -187,7 +185,6 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromIcon
NSImage *image = nil; NSImage *image = nil;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_ANY_THREAD;
IconRef iconRef; IconRef iconRef;
if (noErr == GetIconRef(kOnSystemDisk, kSystemIconsCreator, selector, &iconRef)) { if (noErr == GetIconRef(kOnSystemDisk, kSystemIconsCreator, selector, &iconRef)) {
...@@ -212,7 +209,6 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromFile ...@@ -212,7 +209,6 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromFile
NSImage *image = nil; NSImage *image = nil;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_ANY_THREAD;
NSString *path = JNFNormalizedNSStringForPath(env, file); NSString *path = JNFNormalizedNSStringForPath(env, file);
image = [[NSImage alloc] initByReferencingFile:path]; image = [[NSImage alloc] initByReferencingFile:path];
...@@ -234,10 +230,9 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageOfFileFr ...@@ -234,10 +230,9 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageOfFileFr
__block NSImage *image = nil; __block NSImage *image = nil;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_ANY_THREAD;
NSString *path = JNFNormalizedNSStringForPath(env, file); NSString *path = JNFNormalizedNSStringForPath(env, file);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
image = [[NSWorkspace sharedWorkspace] iconForFile:path]; image = [[NSWorkspace sharedWorkspace] iconForFile:path];
[image setScalesWhenResized:TRUE]; [image setScalesWhenResized:TRUE];
if (image) CFRetain(image); // GC if (image) CFRetain(image); // GC
...@@ -259,7 +254,6 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromImag ...@@ -259,7 +254,6 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromImag
NSImage *image = nil; NSImage *image = nil;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_ANY_THREAD;
image = [NSImage imageNamed:JNFJavaToNSString(env, name)]; image = [NSImage imageNamed:JNFJavaToNSString(env, name)];
if (image) CFRetain(image); // GC if (image) CFRetain(image); // GC
...@@ -278,7 +272,6 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CImage_nativeCopyNSImageIntoArray ...@@ -278,7 +272,6 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CImage_nativeCopyNSImageIntoArray
(JNIEnv *env, jclass klass, jlong nsImgPtr, jintArray buffer, jint w, jint h) (JNIEnv *env, jclass klass, jlong nsImgPtr, jintArray buffer, jint w, jint h)
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_ANY_THREAD;
NSImage *img = (NSImage *)jlong_to_ptr(nsImgPtr); NSImage *img = (NSImage *)jlong_to_ptr(nsImgPtr);
jint *dst = (*env)->GetPrimitiveArrayCritical(env, buffer, NULL); jint *dst = (*env)->GetPrimitiveArrayCritical(env, buffer, NULL);
...@@ -301,7 +294,6 @@ JNIEXPORT jobject JNICALL Java_sun_lwawt_macosx_CImage_nativeGetNSImageSize ...@@ -301,7 +294,6 @@ JNIEXPORT jobject JNICALL Java_sun_lwawt_macosx_CImage_nativeGetNSImageSize
jobject size = NULL; jobject size = NULL;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_ANY_THREAD;
size = NSToJavaSize(env, [(NSImage *)jlong_to_ptr(nsImgPtr) size]); size = NSToJavaSize(env, [(NSImage *)jlong_to_ptr(nsImgPtr) size]);
......
...@@ -153,7 +153,7 @@ JNIEXPORT jobject JNICALL Java_sun_lwawt_macosx_CInputMethod_nativeGetCurrentInp ...@@ -153,7 +153,7 @@ JNIEXPORT jobject JNICALL Java_sun_lwawt_macosx_CInputMethod_nativeGetCurrentInp
__block NSString *keyboardInfo = NULL; __block NSString *keyboardInfo = NULL;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
keyboardInfo = [inputMethodController performSelector:@selector(currentInputMethodName)]; keyboardInfo = [inputMethodController performSelector:@selector(currentInputMethodName)];
[keyboardInfo retain]; [keyboardInfo retain];
}]; }];
...@@ -177,7 +177,7 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CInputMethod_nativeNotifyPeer ...@@ -177,7 +177,7 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CInputMethod_nativeNotifyPeer
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWTView *view = (AWTView *)jlong_to_ptr(nativePeer); AWTView *view = (AWTView *)jlong_to_ptr(nativePeer);
JNFJObjectWrapper *inputMethodWrapper = [[JNFJObjectWrapper alloc] initWithJObject:inputMethod withEnv:env]; JNFJObjectWrapper *inputMethodWrapper = [[JNFJObjectWrapper alloc] initWithJObject:inputMethod withEnv:env];
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[CInputMethod _nativeNotifyPeerWithView:view inputMethod:inputMethodWrapper]; [CInputMethod _nativeNotifyPeerWithView:view inputMethod:inputMethodWrapper];
}]; }];
...@@ -196,7 +196,7 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CInputMethod_nativeEndComposition ...@@ -196,7 +196,7 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CInputMethod_nativeEndComposition
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWTView *view = (AWTView *)jlong_to_ptr(nativePeer); AWTView *view = (AWTView *)jlong_to_ptr(nativePeer);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[CInputMethod _nativeEndComposition:view]; [CInputMethod _nativeEndComposition:view];
}]; }];
...@@ -216,7 +216,7 @@ JNIEXPORT jobject JNICALL Java_sun_lwawt_macosx_CInputMethod_getNativeLocale ...@@ -216,7 +216,7 @@ JNIEXPORT jobject JNICALL Java_sun_lwawt_macosx_CInputMethod_getNativeLocale
__block NSString *isoAbbreviation; __block NSString *isoAbbreviation;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
isoAbbreviation = (NSString *) [inputMethodController performSelector:@selector(currentInputMethodLocale)]; isoAbbreviation = (NSString *) [inputMethodController performSelector:@selector(currentInputMethodLocale)];
[isoAbbreviation retain]; [isoAbbreviation retain];
}]; }];
...@@ -259,7 +259,7 @@ JNF_COCOA_ENTER(env); ...@@ -259,7 +259,7 @@ JNF_COCOA_ENTER(env);
NSString *localeStr = JNFJavaToNSString(env, locale); NSString *localeStr = JNFJavaToNSString(env, locale);
[localeStr retain]; [localeStr retain];
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
[CInputMethod setKeyboardLayout:localeStr]; [CInputMethod setKeyboardLayout:localeStr];
}]; }];
...@@ -293,7 +293,7 @@ JNIEXPORT jobject JNICALL Java_sun_lwawt_macosx_CInputMethodDescriptor_nativeGet ...@@ -293,7 +293,7 @@ JNIEXPORT jobject JNICALL Java_sun_lwawt_macosx_CInputMethodDescriptor_nativeGet
__block NSArray *selectableArray = nil; __block NSArray *selectableArray = nil;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
selectableArray = (NSArray *)[inputMethodController performSelector:@selector(availableInputMethodLocales)]; selectableArray = (NSArray *)[inputMethodController performSelector:@selector(availableInputMethodLocales)];
[selectableArray retain]; [selectableArray retain];
}]; }];
......
...@@ -55,12 +55,10 @@ AWT_ASSERT_APPKIT_THREAD; ...@@ -55,12 +55,10 @@ AWT_ASSERT_APPKIT_THREAD;
//- (void)finalize { [super finalize]; } //- (void)finalize { [super finalize]; }
- (void)addJavaSubmenu:(CMenu *)submenu { - (void)addJavaSubmenu:(CMenu *)submenu {
AWT_ASSERT_NOT_APPKIT_THREAD;
[ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) onObject:self withObject:submenu waitUntilDone:YES awtMode:YES]; [ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) onObject:self withObject:submenu waitUntilDone:YES awtMode:YES];
} }
- (void)addJavaMenuItem:(CMenuItem *)theMenuItem { - (void)addJavaMenuItem:(CMenuItem *)theMenuItem {
AWT_ASSERT_NOT_APPKIT_THREAD;
[ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) onObject:self withObject:theMenuItem waitUntilDone:YES awtMode:YES]; [ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) onObject:self withObject:theMenuItem waitUntilDone:YES awtMode:YES];
} }
...@@ -70,7 +68,6 @@ AWT_ASSERT_APPKIT_THREAD; ...@@ -70,7 +68,6 @@ AWT_ASSERT_APPKIT_THREAD;
} }
- (void)setJavaMenuTitle:(NSString *)title { - (void)setJavaMenuTitle:(NSString *)title {
AWT_ASSERT_NOT_APPKIT_THREAD;
if (title) { if (title) {
[ThreadUtilities performOnMainThread:@selector(setNativeMenuTitle_OnAppKitThread:) onObject:self withObject:title waitUntilDone:YES awtMode:YES]; [ThreadUtilities performOnMainThread:@selector(setNativeMenuTitle_OnAppKitThread:) onObject:self withObject:title waitUntilDone:YES awtMode:YES];
...@@ -95,7 +92,6 @@ AWT_ASSERT_APPKIT_THREAD; ...@@ -95,7 +92,6 @@ AWT_ASSERT_APPKIT_THREAD;
} }
- (void)deleteJavaItem:(jint)index { - (void)deleteJavaItem:(jint)index {
AWT_ASSERT_NOT_APPKIT_THREAD;
[ThreadUtilities performOnMainThread:@selector(deleteNativeJavaItem_OnAppKitThread:) onObject:self withObject:[NSNumber numberWithInt:index] waitUntilDone:YES awtMode:YES]; [ThreadUtilities performOnMainThread:@selector(deleteNativeJavaItem_OnAppKitThread:) onObject:self withObject:[NSNumber numberWithInt:index] waitUntilDone:YES awtMode:YES];
} }
......
...@@ -80,10 +80,10 @@ Java_sun_lwawt_macosx_CMenuComponent_nativeDispose ...@@ -80,10 +80,10 @@ Java_sun_lwawt_macosx_CMenuComponent_nativeDispose
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[JNFRunLoop performOnMainThread:@selector(disposer) [ThreadUtilities performOnMainThread:@selector(disposer)
on:((id)jlong_to_ptr(menuItemObj)) on:((id)jlong_to_ptr(menuItemObj))
withObject:nil withObject:nil
waitUntilDone:NO]; waitUntilDone:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
...@@ -104,7 +104,6 @@ JNF_COCOA_EXIT(env); ...@@ -104,7 +104,6 @@ JNF_COCOA_EXIT(env);
} }
- (void) setJavaLabel:(NSString *)theLabel shortcut:(NSString *)theKeyEquivalent modifierMask:(jint)modifiers { - (void) setJavaLabel:(NSString *)theLabel shortcut:(NSString *)theKeyEquivalent modifierMask:(jint)modifiers {
AWT_ASSERT_NOT_APPKIT_THREAD;
NSUInteger modifierMask = 0; NSUInteger modifierMask = 0;
...@@ -126,8 +125,7 @@ AWT_ASSERT_NOT_APPKIT_THREAD; ...@@ -126,8 +125,7 @@ AWT_ASSERT_NOT_APPKIT_THREAD;
modifierMask = JavaModifiersToNsKeyModifiers(modifiers, NO); modifierMask = JavaModifiersToNsKeyModifiers(modifiers, NO);
} }
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
AWT_ASSERT_APPKIT_THREAD;
[fMenuItem setKeyEquivalent:theKeyEquivalent]; [fMenuItem setKeyEquivalent:theKeyEquivalent];
[fMenuItem setKeyEquivalentModifierMask:modifierMask]; [fMenuItem setKeyEquivalentModifierMask:modifierMask];
[fMenuItem setTitle:theLabel]; [fMenuItem setTitle:theLabel];
...@@ -135,32 +133,23 @@ AWT_ASSERT_NOT_APPKIT_THREAD; ...@@ -135,32 +133,23 @@ AWT_ASSERT_NOT_APPKIT_THREAD;
} }
- (void) setJavaImage:(NSImage *)theImage { - (void) setJavaImage:(NSImage *)theImage {
AWT_ASSERT_NOT_APPKIT_THREAD;
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
AWT_ASSERT_APPKIT_THREAD;
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[fMenuItem setImage:theImage]; [fMenuItem setImage:theImage];
}]; }];
} }
- (void) setJavaToolTipText:(NSString *)theText { - (void) setJavaToolTipText:(NSString *)theText {
AWT_ASSERT_NOT_APPKIT_THREAD;
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
AWT_ASSERT_APPKIT_THREAD;
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[fMenuItem setToolTip:theText]; [fMenuItem setToolTip:theText];
}]; }];
} }
- (void)setJavaEnabled:(BOOL) enabled { - (void)setJavaEnabled:(BOOL) enabled {
AWT_ASSERT_NOT_APPKIT_THREAD;
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
AWT_ASSERT_APPKIT_THREAD;
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
@synchronized(self) { @synchronized(self) {
fIsEnabled = enabled; fIsEnabled = enabled;
...@@ -173,7 +162,6 @@ AWT_ASSERT_NOT_APPKIT_THREAD; ...@@ -173,7 +162,6 @@ AWT_ASSERT_NOT_APPKIT_THREAD;
} }
- (BOOL)isEnabled { - (BOOL)isEnabled {
// AWT_ASSERT_ANY_THREAD;
BOOL enabled = NO; BOOL enabled = NO;
@synchronized(self) { @synchronized(self) {
...@@ -184,11 +172,8 @@ AWT_ASSERT_NOT_APPKIT_THREAD; ...@@ -184,11 +172,8 @@ AWT_ASSERT_NOT_APPKIT_THREAD;
- (void)setJavaState:(BOOL)newState { - (void)setJavaState:(BOOL)newState {
AWT_ASSERT_NOT_APPKIT_THREAD;
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
AWT_ASSERT_APPKIT_THREAD;
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[fMenuItem setState:(newState ? NSOnState : NSOffState)]; [fMenuItem setState:(newState ? NSOnState : NSOffState)];
}]; }];
} }
......
...@@ -64,7 +64,7 @@ JNF_COCOA_ENTER(env); ...@@ -64,7 +64,7 @@ JNF_COCOA_ENTER(env);
jobject cPeerObjGlobal = JNFNewGlobalRef(env, peer); jobject cPeerObjGlobal = JNFNewGlobalRef(env, peer);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
aCPopupMenu = [[CPopupMenu alloc] initWithPeer:cPeerObjGlobal]; aCPopupMenu = [[CPopupMenu alloc] initWithPeer:cPeerObjGlobal];
CFRetain(aCPopupMenu); CFRetain(aCPopupMenu);
[aCPopupMenu release]; [aCPopupMenu release];
...@@ -82,7 +82,7 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPopupMenu_nativeShowPopupMenu ...@@ -82,7 +82,7 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPopupMenu_nativeShowPopupMenu
CPopupMenu* cPopupMenu = (CPopupMenu*)jlong_to_ptr(menuPtr); CPopupMenu* cPopupMenu = (CPopupMenu*)jlong_to_ptr(menuPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
NSPoint loc = ConvertNSScreenPoint(env, NSMakePoint(x, y)); NSPoint loc = ConvertNSScreenPoint(env, NSMakePoint(x, y));
[[cPopupMenu menu] popUpMenuPositioningItem: nil [[cPopupMenu menu] popUpMenuPositioningItem: nil
......
...@@ -303,10 +303,9 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CTrayIcon_nativeCreate ...@@ -303,10 +303,9 @@ JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CTrayIcon_nativeCreate
__block AWTTrayIcon *trayIcon = nil; __block AWTTrayIcon *trayIcon = nil;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
jobject thePeer = JNFNewGlobalRef(env, peer); jobject thePeer = JNFNewGlobalRef(env, peer);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
trayIcon = [[AWTTrayIcon alloc] initWithPeer:thePeer]; trayIcon = [[AWTTrayIcon alloc] initWithPeer:thePeer];
}]; }];
...@@ -334,11 +333,10 @@ JNIEXPORT void JNICALL Java_java_awt_TrayIcon_initIDs ...@@ -334,11 +333,10 @@ JNIEXPORT void JNICALL Java_java_awt_TrayIcon_initIDs
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CTrayIcon_nativeSetToolTip JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CTrayIcon_nativeSetToolTip
(JNIEnv *env, jobject self, jlong model, jstring jtooltip) { (JNIEnv *env, jobject self, jlong model, jstring jtooltip) {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
AWTTrayIcon *icon = jlong_to_ptr(model); AWTTrayIcon *icon = jlong_to_ptr(model);
NSString *tooltip = JNFJavaToNSString(env, jtooltip); NSString *tooltip = JNFJavaToNSString(env, jtooltip);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[icon setTooltip:tooltip]; [icon setTooltip:tooltip];
}]; }];
...@@ -353,10 +351,9 @@ JNF_COCOA_EXIT(env); ...@@ -353,10 +351,9 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CTrayIcon_setNativeImage JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CTrayIcon_setNativeImage
(JNIEnv *env, jobject self, jlong model, jlong imagePtr, jboolean autosize) { (JNIEnv *env, jobject self, jlong model, jlong imagePtr, jboolean autosize) {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
AWTTrayIcon *icon = jlong_to_ptr(model); AWTTrayIcon *icon = jlong_to_ptr(model);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
[icon setImage:jlong_to_ptr(imagePtr) sizing:autosize]; [icon setImage:jlong_to_ptr(imagePtr) sizing:autosize];
}]; }];
...@@ -369,13 +366,10 @@ Java_sun_lwawt_macosx_CTrayIcon_nativeGetIconLocation ...@@ -369,13 +366,10 @@ Java_sun_lwawt_macosx_CTrayIcon_nativeGetIconLocation
jobject jpt = NULL; jobject jpt = NULL;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWT_ASSERT_NOT_APPKIT_THREAD;
__block NSPoint pt = NSZeroPoint; __block NSPoint pt = NSZeroPoint;
AWTTrayIcon *icon = jlong_to_ptr(model); AWTTrayIcon *icon = jlong_to_ptr(model);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
AWT_ASSERT_APPKIT_THREAD;
NSPoint loc = [icon getLocationOnScreen]; NSPoint loc = [icon getLocationOnScreen];
pt = ConvertNSScreenPoint(env, loc); pt = ConvertNSScreenPoint(env, loc);
}]; }];
......
...@@ -46,7 +46,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSObject_release ...@@ -46,7 +46,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSObject_release
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
id obj = (id)jlong_to_ptr(objectPtr); id obj = (id)jlong_to_ptr(objectPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
CFRelease(obj); CFRelease(obj);
}]; }];
...@@ -66,10 +66,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeKeyAndOrderFront ...@@ -66,10 +66,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeKeyAndOrderFront
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
[JNFRunLoop performOnMainThread:@selector(makeKeyAndOrderFront:) [ThreadUtilities performOnMainThread:@selector(makeKeyAndOrderFront:)
on:window on:window
withObject:nil withObject:nil
waitUntilDone:NO]; waitUntilDone:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
...@@ -86,10 +86,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeKeyWindow ...@@ -86,10 +86,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeKeyWindow
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
[JNFRunLoop performOnMainThread:@selector(makeKeyWindow) [ThreadUtilities performOnMainThread:@selector(makeKeyWindow)
on:window on:window
withObject:nil withObject:nil
waitUntilDone:NO]; waitUntilDone:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
...@@ -106,10 +106,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeMainWindow ...@@ -106,10 +106,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeMainWindow
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
[JNFRunLoop performOnMainThread:@selector(makeMainWindow) [ThreadUtilities performOnMainThread:@selector(makeMainWindow)
on:window on:window
withObject:nil withObject:nil
waitUntilDone:NO]; waitUntilDone:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
...@@ -128,7 +128,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_canBecomeMainWindow ...@@ -128,7 +128,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_canBecomeMainWindow
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
canBecomeMainWindow = [window canBecomeMainWindow]; canBecomeMainWindow = [window canBecomeMainWindow];
}]; }];
...@@ -151,7 +151,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_isKeyWindow ...@@ -151,7 +151,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_isKeyWindow
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
isKeyWindow = [window isKeyWindow]; isKeyWindow = [window isKeyWindow];
}]; }];
...@@ -172,10 +172,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderFront ...@@ -172,10 +172,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderFront
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
[JNFRunLoop performOnMainThread:@selector(orderFront:) [ThreadUtilities performOnMainThread:@selector(orderFront:)
on:window on:window
withObject:window withObject:window
waitUntilDone:NO]; waitUntilDone:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
...@@ -192,10 +192,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderOut ...@@ -192,10 +192,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderOut
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
[JNFRunLoop performOnMainThread:@selector(orderOut:) [ThreadUtilities performOnMainThread:@selector(orderOut:)
on:window on:window
withObject:window withObject:window
waitUntilDone:NO]; waitUntilDone:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
...@@ -212,10 +212,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderFrontRegardless ...@@ -212,10 +212,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderFrontRegardless
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
[JNFRunLoop performOnMainThread:@selector(orderFrontRegardless) [ThreadUtilities performOnMainThread:@selector(orderFrontRegardless)
on:window on:window
withObject:nil withObject:nil
waitUntilDone:NO]; waitUntilDone:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
...@@ -233,7 +233,7 @@ JNF_COCOA_ENTER(env); ...@@ -233,7 +233,7 @@ JNF_COCOA_ENTER(env);
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
NSWindow *relativeTo = (NSWindow *)jlong_to_ptr(relativeToPtr); NSWindow *relativeTo = (NSWindow *)jlong_to_ptr(relativeToPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[window orderWindow:(NSWindowOrderingMode)order relativeTo:[relativeTo windowNumber]]; [window orderWindow:(NSWindowOrderingMode)order relativeTo:[relativeTo windowNumber]];
}]; }];
...@@ -267,7 +267,7 @@ JNF_COCOA_ENTER(env); ...@@ -267,7 +267,7 @@ JNF_COCOA_ENTER(env);
initLevels(); initLevels();
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[window setLevel: LEVELS[level]]; [window setLevel: LEVELS[level]];
}]; }];
} else { } else {
...@@ -290,7 +290,7 @@ JNF_COCOA_ENTER(env); ...@@ -290,7 +290,7 @@ JNF_COCOA_ENTER(env);
NSWindow *parent = (NSWindow *)jlong_to_ptr(parentPtr); NSWindow *parent = (NSWindow *)jlong_to_ptr(parentPtr);
NSWindow *child = (NSWindow *)jlong_to_ptr(childPtr); NSWindow *child = (NSWindow *)jlong_to_ptr(childPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[parent addChildWindow:child ordered:order]; [parent addChildWindow:child ordered:order];
}]; }];
...@@ -310,10 +310,10 @@ JNF_COCOA_ENTER(env); ...@@ -310,10 +310,10 @@ JNF_COCOA_ENTER(env);
AWTWindow *parent = (AWTWindow *)jlong_to_ptr(parentPtr); AWTWindow *parent = (AWTWindow *)jlong_to_ptr(parentPtr);
AWTWindow *child = (AWTWindow *)jlong_to_ptr(childPtr); AWTWindow *child = (AWTWindow *)jlong_to_ptr(childPtr);
[JNFRunLoop performOnMainThread:@selector(removeChildWindow:) [ThreadUtilities performOnMainThread:@selector(removeChildWindow:)
on:parent on:parent
withObject:child withObject:child
waitUntilDone:NO]; waitUntilDone:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
...@@ -331,7 +331,7 @@ JNF_COCOA_ENTER(env); ...@@ -331,7 +331,7 @@ JNF_COCOA_ENTER(env);
AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr); AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr);
NSRect frame = NSMakeRect(x, y, w, h); NSRect frame = NSMakeRect(x, y, w, h);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[window setFrame:frame display:display]; [window setFrame:frame display:display];
}]; }];
...@@ -350,7 +350,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setAlphaValue ...@@ -350,7 +350,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setAlphaValue
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr); AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[window setAlphaValue:(CGFloat)alpha]; [window setAlphaValue:(CGFloat)alpha];
}]; }];
...@@ -369,7 +369,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setOpaque ...@@ -369,7 +369,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setOpaque
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr); AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[window setOpaque:(BOOL)opaque]; [window setOpaque:(BOOL)opaque];
}]; }];
...@@ -389,7 +389,7 @@ JNF_COCOA_ENTER(env); ...@@ -389,7 +389,7 @@ JNF_COCOA_ENTER(env);
AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr); AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr);
NSColor *color = (NSColor *)jlong_to_ptr(colorPtr); NSColor *color = (NSColor *)jlong_to_ptr(colorPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[window setBackgroundColor:color]; [window setBackgroundColor:color];
}]; }];
...@@ -410,7 +410,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_screen ...@@ -410,7 +410,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_screen
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr); AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
const NSScreen *screen = [window screen]; const NSScreen *screen = [window screen];
CFRetain(screen); // GC CFRetain(screen); // GC
screenPtr = ptr_to_jlong(screen); screenPtr = ptr_to_jlong(screen);
...@@ -432,10 +432,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_miniaturize ...@@ -432,10 +432,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_miniaturize
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
[JNFRunLoop performOnMainThread:@selector(miniaturize:) [ThreadUtilities performOnMainThread:@selector(miniaturize:)
on:window on:window
withObject:nil withObject:nil
waitUntilDone:NO]; waitUntilDone:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
...@@ -452,10 +452,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_deminiaturize ...@@ -452,10 +452,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_deminiaturize
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
[JNFRunLoop performOnMainThread:@selector(deminiaturize:) [ThreadUtilities performOnMainThread:@selector(deminiaturize:)
on:window on:window
withObject:nil withObject:nil
waitUntilDone:NO]; waitUntilDone:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
...@@ -472,10 +472,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_zoom ...@@ -472,10 +472,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSWindow_zoom
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
[JNFRunLoop performOnMainThread:@selector(zoom:) [ThreadUtilities performOnMainThread:@selector(zoom:)
on:window on:window
withObject:nil withObject:nil
waitUntilDone:NO]; waitUntilDone:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
...@@ -493,10 +493,10 @@ JNF_COCOA_ENTER(env); ...@@ -493,10 +493,10 @@ JNF_COCOA_ENTER(env);
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr); NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
NSResponder *responder = (NSResponder *)jlong_to_ptr(responderPtr); NSResponder *responder = (NSResponder *)jlong_to_ptr(responderPtr);
[JNFRunLoop performOnMainThread:@selector(makeFirstResponder:) [ThreadUtilities performOnMainThread:@selector(makeFirstResponder:)
on:window on:window
withObject:responder withObject:responder
waitUntilDone:NO]; waitUntilDone:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
...@@ -514,7 +514,7 @@ JNF_COCOA_ENTER(env); ...@@ -514,7 +514,7 @@ JNF_COCOA_ENTER(env);
NSView *view = (NSView *)jlong_to_ptr(viewPtr); NSView *view = (NSView *)jlong_to_ptr(viewPtr);
NSView *subview = (NSView *)jlong_to_ptr(subviewPtr); NSView *subview = (NSView *)jlong_to_ptr(subviewPtr);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
[view addSubview:subview]; [view addSubview:subview];
}]; }];
...@@ -533,10 +533,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSView_removeFromSuperview ...@@ -533,10 +533,10 @@ Java_sun_lwawt_macosx_CWrapper_00024NSView_removeFromSuperview
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSView *view = (NSView *)jlong_to_ptr(viewPtr); NSView *view = (NSView *)jlong_to_ptr(viewPtr);
[JNFRunLoop performOnMainThread:@selector(removeFromSuperview) [ThreadUtilities performOnMainThread:@selector(removeFromSuperview)
on:view on:view
withObject:nil withObject:nil
waitUntilDone:NO]; waitUntilDone:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
...@@ -553,7 +553,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSView_setFrame ...@@ -553,7 +553,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSView_setFrame
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSView *view = (NSView *)jlong_to_ptr(viewPtr); NSView *view = (NSView *)jlong_to_ptr(viewPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[view setFrame:NSMakeRect(x, y, w, h)]; [view setFrame:NSMakeRect(x, y, w, h)];
}]; }];
...@@ -576,7 +576,7 @@ JNF_COCOA_ENTER(env); ...@@ -576,7 +576,7 @@ JNF_COCOA_ENTER(env);
__block NSRect rect = NSZeroRect; __block NSRect rect = NSZeroRect;
NSView *view = (NSView *)jlong_to_ptr(viewPtr); NSView *view = (NSView *)jlong_to_ptr(viewPtr);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
rect = [view frame]; rect = [view frame];
}]; }];
...@@ -599,7 +599,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSView_enterFullScreenMode ...@@ -599,7 +599,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSView_enterFullScreenMode
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSView *view = (NSView *)jlong_to_ptr(viewPtr); NSView *view = (NSView *)jlong_to_ptr(viewPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
NSScreen *screen = [[view window] screen]; NSScreen *screen = [[view window] screen];
NSDictionary *opts = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], NSFullScreenModeAllScreens, nil]; NSDictionary *opts = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], NSFullScreenModeAllScreens, nil];
[view enterFullScreenMode:screen withOptions:opts]; [view enterFullScreenMode:screen withOptions:opts];
...@@ -620,7 +620,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSView_exitFullScreenMode ...@@ -620,7 +620,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSView_exitFullScreenMode
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSView *view = (NSView *)jlong_to_ptr(viewPtr); NSView *view = (NSView *)jlong_to_ptr(viewPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[view exitFullScreenModeWithOptions:nil]; [view exitFullScreenModeWithOptions:nil];
}]; }];
...@@ -641,7 +641,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSView_window ...@@ -641,7 +641,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSView_window
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSView *view = (NSView *)jlong_to_ptr(viewPtr); NSView *view = (NSView *)jlong_to_ptr(viewPtr);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
windowPtr = ptr_to_jlong([view window]); windowPtr = ptr_to_jlong([view window]);
}]; }];
...@@ -655,14 +655,14 @@ JNF_COCOA_EXIT(env); ...@@ -655,14 +655,14 @@ JNF_COCOA_EXIT(env);
* Method: setHidden * Method: setHidden
* Signature: (JZ)V * Signature: (JZ)V
*/ */
JNIEXPORT jlong JNICALL JNIEXPORT void JNICALL
Java_sun_lwawt_macosx_CWrapper_00024NSView_setHidden Java_sun_lwawt_macosx_CWrapper_00024NSView_setHidden
(JNIEnv *env, jclass cls, jlong viewPtr, jboolean toHide) (JNIEnv *env, jclass cls, jlong viewPtr, jboolean toHide)
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
NSView *view = (NSView *)jlong_to_ptr(viewPtr); NSView *view = (NSView *)jlong_to_ptr(viewPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[view setHidden:(BOOL)toHide]; [view setHidden:(BOOL)toHide];
}]; }];
...@@ -686,7 +686,7 @@ JNF_COCOA_ENTER(env); ...@@ -686,7 +686,7 @@ JNF_COCOA_ENTER(env);
__block NSRect rect = NSZeroRect; __block NSRect rect = NSZeroRect;
NSScreen *screen = (NSScreen *)jlong_to_ptr(screenPtr); NSScreen *screen = (NSScreen *)jlong_to_ptr(screenPtr);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
rect = [screen frame]; rect = [screen frame];
}]; }];
...@@ -713,7 +713,7 @@ JNF_COCOA_ENTER(env); ...@@ -713,7 +713,7 @@ JNF_COCOA_ENTER(env);
__block NSRect rect = NSZeroRect; __block NSRect rect = NSZeroRect;
NSScreen *screen = (NSScreen *)jlong_to_ptr(screenPtr); NSScreen *screen = (NSScreen *)jlong_to_ptr(screenPtr);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
rect = [screen visibleFrame]; rect = [screen visibleFrame];
}]; }];
...@@ -737,7 +737,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSScreen_screenByDisplayId ...@@ -737,7 +737,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSScreen_screenByDisplayId
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
NSArray *screens = [NSScreen screens]; NSArray *screens = [NSScreen screens];
for (NSScreen *screen in screens) { for (NSScreen *screen in screens) {
NSDictionary *screenInfo = [screen deviceDescription]; NSDictionary *screenInfo = [screen deviceDescription];
...@@ -768,7 +768,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSColor_clearColor ...@@ -768,7 +768,7 @@ Java_sun_lwawt_macosx_CWrapper_00024NSColor_clearColor
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
clearColorPtr = ptr_to_jlong([NSColor clearColor]); clearColorPtr = ptr_to_jlong([NSColor clearColor]);
}]; }];
......
...@@ -1147,7 +1147,6 @@ static NSObject *sAttributeNamesLOCK = nil; ...@@ -1147,7 +1147,6 @@ static NSObject *sAttributeNamesLOCK = nil;
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessibility_focusChanged JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessibility_focusChanged
(JNIEnv *env, jobject jthis) (JNIEnv *env, jobject jthis)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[ThreadUtilities performOnMainThread:@selector(postFocusChanged:) onObject:[JavaComponentAccessibility class] withObject:nil waitUntilDone:NO awtMode:NO]; [ThreadUtilities performOnMainThread:@selector(postFocusChanged:) onObject:[JavaComponentAccessibility class] withObject:nil waitUntilDone:NO awtMode:NO];
...@@ -1164,7 +1163,6 @@ JNF_COCOA_EXIT(env); ...@@ -1164,7 +1163,6 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_valueChanged JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_valueChanged
(JNIEnv *env, jclass jklass, jlong element) (JNIEnv *env, jclass jklass, jlong element)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[ThreadUtilities performOnMainThread:@selector(postValueChanged) onObject:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO awtMode:NO]; [ThreadUtilities performOnMainThread:@selector(postValueChanged) onObject:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO awtMode:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
...@@ -1178,7 +1176,6 @@ JNF_COCOA_EXIT(env); ...@@ -1178,7 +1176,6 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_selectionChanged JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_selectionChanged
(JNIEnv *env, jclass jklass, jlong element) (JNIEnv *env, jclass jklass, jlong element)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[ThreadUtilities performOnMainThread:@selector(postSelectionChanged) onObject:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO awtMode:NO]; [ThreadUtilities performOnMainThread:@selector(postSelectionChanged) onObject:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO awtMode:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
...@@ -1193,7 +1190,6 @@ JNF_COCOA_EXIT(env); ...@@ -1193,7 +1190,6 @@ JNF_COCOA_EXIT(env);
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_unregisterFromCocoaAXSystem JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_unregisterFromCocoaAXSystem
(JNIEnv *env, jclass jklass, jlong element) (JNIEnv *env, jclass jklass, jlong element)
{ {
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
[ThreadUtilities performOnMainThread:@selector(unregisterFromCocoaAXSystem) onObject:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO awtMode:NO]; [ThreadUtilities performOnMainThread:@selector(unregisterFromCocoaAXSystem) onObject:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO awtMode:NO];
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
......
...@@ -415,13 +415,9 @@ JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_LWCToolkit_isApplicationActive ...@@ -415,13 +415,9 @@ JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_LWCToolkit_isApplicationActive
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
if ([NSThread isMainThread]) { [ThreadUtilities performOnMainThreadWaiting:YES block:^() {
active = (jboolean)[NSRunningApplication currentApplication].active; active = (jboolean)[NSRunningApplication currentApplication].active;
} else { }];
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^() {
active = (jboolean)[NSRunningApplication currentApplication].active;
}];
}
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
......
...@@ -315,14 +315,9 @@ AWT_ASSERT_APPKIT_THREAD; ...@@ -315,14 +315,9 @@ AWT_ASSERT_APPKIT_THREAD;
// Don't set the delegate until the NSApplication has been created and // Don't set the delegate until the NSApplication has been created and
// its finishLaunching has initialized it. // its finishLaunching has initialized it.
// ApplicationDelegate is the support code for com.apple.eawt. // ApplicationDelegate is the support code for com.apple.eawt.
void (^setDelegateBlock)() = ^(){ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
OSXAPP_SetApplicationDelegate([ApplicationDelegate sharedDelegate]); OSXAPP_SetApplicationDelegate([ApplicationDelegate sharedDelegate]);
}; }];
if (onMainThread) {
setDelegateBlock();
} else {
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:setDelegateBlock];
}
} }
- (void)starter:(NSArray*)args { - (void)starter:(NSArray*)args {
......
...@@ -98,8 +98,6 @@ do { \ ...@@ -98,8 +98,6 @@ do { \
} \ } \
} while (0) } while (0)
#define AWT_ASSERT_ANY_THREAD
#endif /* AWT_THREAD_ASSERTS_MESSAGES */ #endif /* AWT_THREAD_ASSERTS_MESSAGES */
#ifdef AWT_THREAD_ASSERTS_WAIT #ifdef AWT_THREAD_ASSERTS_WAIT
...@@ -114,15 +112,12 @@ do { \ ...@@ -114,15 +112,12 @@ do { \
while (pthread_main_np() != 0) {} \ while (pthread_main_np() != 0) {} \
} while (0) } while (0)
#define AWT_ASSERT_ANY_THREAD
#endif /* AWT_THREAD_ASSERTS_WAIT */ #endif /* AWT_THREAD_ASSERTS_WAIT */
#else /* AWT_THREAD_ASSERTS */ #else /* AWT_THREAD_ASSERTS */
#define AWT_ASSERT_APPKIT_THREAD do {} while (0) #define AWT_ASSERT_APPKIT_THREAD do {} while (0)
#define AWT_ASSERT_NOT_APPKIT_THREAD do {} while (0) #define AWT_ASSERT_NOT_APPKIT_THREAD do {} while (0)
#define AWT_ASSERT_ANY_THREAD
#endif /* AWT_THREAD_ASSERTS */ #endif /* AWT_THREAD_ASSERTS */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
...@@ -139,7 +134,10 @@ __attribute__((visibility("default"))) ...@@ -139,7 +134,10 @@ __attribute__((visibility("default")))
+ (JNIEnv*)getJNIEnvUncached; + (JNIEnv*)getJNIEnvUncached;
+ (void)performOnMainThread:(SEL)aSelector onObject:(id)target withObject:(id)arg waitUntilDone:(BOOL)wait awtMode:(BOOL)inAWT; + (void)performOnMainThread:(SEL)aSelector onObject:(id)target withObject:(id)arg waitUntilDone:(BOOL)wait awtMode:(BOOL)inAWT;
//Wrappers for the corresponding JNFRunLoop methods with a check for main thread
+ (void)performOnMainThreadWaiting:(BOOL)wait block:(void (^)())block; + (void)performOnMainThreadWaiting:(BOOL)wait block:(void (^)())block;
+ (void)performOnMainThread:(SEL)aSelector on:(id)target withObject:(id)arg waitUntilDone:(BOOL)wait;
@end @end
void OSXAPP_SetJavaVM(JavaVM *vm); void OSXAPP_SetJavaVM(JavaVM *vm);
......
...@@ -37,27 +37,13 @@ static JNIEnv *appKitEnv = NULL; ...@@ -37,27 +37,13 @@ static JNIEnv *appKitEnv = NULL;
static NSArray *sPerformModes = nil; static NSArray *sPerformModes = nil;
static NSArray *sAWTPerformModes = nil; static NSArray *sAWTPerformModes = nil;
static BOOL sCocoaComponentCompatibility = NO;
static NSTimeInterval sCocoaComponentCompatibilityTimeout = 0.5;
static BOOL sLoggingEnabled = YES; static BOOL sLoggingEnabled = YES;
#ifdef AWT_THREAD_ASSERTS_ENV_ASSERT #ifdef AWT_THREAD_ASSERTS_ENV_ASSERT
int sAWTThreadAsserts = 0; int sAWTThreadAsserts = 0;
#endif /* AWT_THREAD_ASSERTS_ENV_ASSERT */ #endif /* AWT_THREAD_ASSERTS_ENV_ASSERT */
// This is for backward compatibility for those people using CocoaComponent
// Since we've flipped the AWT threading model for Tiger (10.4), all the rules
// for CocoaComponent are wrong.
// So for existing CocoaComponent users, we can't be synchronous.
// Making things totally asynchronous breaks a _lot_, so we try to be
// synchronous and time out after a little bit.
#define NOT_READY 0
#define READY 1
#define IN_PROGRESS 2
BOOL sInPerformFromJava = NO; BOOL sInPerformFromJava = NO;
NSUInteger sPerformCount = 0;
// This class is used so that performSelectorOnMainThread can be // This class is used so that performSelectorOnMainThread can be
// controlled a little more easily by us. It has 2 roles. // controlled a little more easily by us. It has 2 roles.
...@@ -73,8 +59,6 @@ NSUInteger sPerformCount = 0; ...@@ -73,8 +59,6 @@ NSUInteger sPerformCount = 0;
- (id) initWithTarget:(id)target selector:(SEL)selector arg:(id)arg wait:(BOOL)wait; - (id) initWithTarget:(id)target selector:(SEL)selector arg:(id)arg wait:(BOOL)wait;
- (void) perform; - (void) perform;
- (void) performCompatible;
- (void) _performCompatible:(NSConditionLock *)resultLock;
@end @end
...@@ -113,8 +97,6 @@ NSUInteger sPerformCount = 0; ...@@ -113,8 +97,6 @@ NSUInteger sPerformCount = 0;
sInPerformFromJava = YES; sInPerformFromJava = YES;
} }
sPerformCount++;
// Actually do the work (cheat to avoid a method call) // Actually do the work (cheat to avoid a method call)
@try { @try {
objc_msgSend(fTarget, fSelector, fArg); objc_msgSend(fTarget, fSelector, fArg);
...@@ -128,69 +110,6 @@ NSUInteger sPerformCount = 0; ...@@ -128,69 +110,6 @@ NSUInteger sPerformCount = 0;
} }
} }
} }
- (void) performCompatible {
// We check if we are on the AppKit thread because frequently, apps
// using CocoaComponent are doing things on the wrong thread!
if (pthread_main_np()) {
[fTarget performSelector:fSelector withObject:fArg];
} else {
// Setup the lock
NSConditionLock *resultLock =
[[NSConditionLock alloc] initWithCondition:NOT_READY];
// Make sure that if we return early, nothing gets released out
// from under us
[resultLock retain];
[fTarget retain];
[fArg retain];
[self retain];
// Do an asynchronous perform to the main thread.
[self performSelectorOnMainThread:@selector(_performCompatible:)
withObject:resultLock waitUntilDone:NO modes:sAWTPerformModes];
// Wait for a little bit for it to finish
[resultLock lockWhenCondition:READY beforeDate:[NSDate dateWithTimeIntervalSinceNow:sCocoaComponentCompatibilityTimeout]];
// If the _performCompatible is actually in progress,
// we should let it finish
if ([resultLock condition] == IN_PROGRESS) {
[resultLock lockWhenCondition:READY];
}
if ([resultLock condition] == NOT_READY && sLoggingEnabled) {
NSLog(@"[Java CocoaComponent compatibility mode]: Operation timed out due to possible deadlock: selector '%@' on target '%@' with args '%@'", NSStringFromSelector(fSelector), fTarget, fArg);
}
[resultLock unlock];
[resultLock autorelease];
}
}
- (void) _performCompatible:(NSConditionLock *)resultLock {
// notify that the perform is in progress!
[resultLock lock];
[resultLock unlockWithCondition:IN_PROGRESS];
sPerformCount++;
// Actually do the work.
@try {
[fTarget performSelector:fSelector withObject:fArg];
} @catch (NSException *e) {
NSLog(@"*** CPerformer: ignoring exception '%@' raised during performCompatible of selector '%@' on target '%@' with args '%@'", e, NSStringFromSelector(fSelector), fTarget, fArg);
} @finally {
// notify done!
[resultLock lock];
[resultLock unlockWithCondition:READY];
// Clean up after ourselves
[resultLock autorelease];
[fTarget autorelease];
[fArg autorelease];
[self autorelease];
}
}
@end @end
...@@ -236,13 +155,8 @@ AWT_ASSERT_APPKIT_THREAD; ...@@ -236,13 +155,8 @@ AWT_ASSERT_APPKIT_THREAD;
// java event thread without deadlocking. See CToolkit.invokeAndWait. // java event thread without deadlocking. See CToolkit.invokeAndWait.
+ (void)performOnMainThread:(SEL)aSelector onObject:(id)target withObject:(id)arg waitUntilDone:(BOOL)wait awtMode:(BOOL)inAWT { + (void)performOnMainThread:(SEL)aSelector onObject:(id)target withObject:(id)arg waitUntilDone:(BOOL)wait awtMode:(BOOL)inAWT {
CPerformer *performer = [[CPerformer alloc] initWithTarget:target selector:aSelector arg:arg wait:wait]; CPerformer *performer = [[CPerformer alloc] initWithTarget:target selector:aSelector arg:arg wait:wait];
if (sCocoaComponentCompatibility && wait && inAWT) { [performer performSelectorOnMainThread:@selector(perform) withObject:nil waitUntilDone:wait modes:((inAWT) ? sAWTPerformModes : sPerformModes)]; // AWT_THREADING Safe (cover method)
[performer performCompatible]; [performer release];
[performer autorelease];
} else {
[performer performSelectorOnMainThread:@selector(perform) withObject:nil waitUntilDone:wait modes:((inAWT) ? sAWTPerformModes : sPerformModes)]; // AWT_THREADING Safe (cover method)
[performer release];
}
} }
+ (void)performOnMainThreadWaiting:(BOOL)wait block:(void (^)())block { + (void)performOnMainThreadWaiting:(BOOL)wait block:(void (^)())block {
...@@ -253,6 +167,14 @@ AWT_ASSERT_APPKIT_THREAD; ...@@ -253,6 +167,14 @@ AWT_ASSERT_APPKIT_THREAD;
} }
} }
+ (void)performOnMainThread:(SEL)aSelector on:(id)target withObject:(id)arg waitUntilDone:(BOOL)wait {
if ([NSThread isMainThread] && wait == YES) {
[target performSelector:aSelector withObject:arg];
} else {
[JNFRunLoop performOnMainThread:aSelector on:target withObject:arg waitUntilDone:wait];
}
}
@end @end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册