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

Print this page

        

@@ -378,35 +378,23 @@
  * Class:     sun_lwawt_macosx_CMenuBar
  * Method:    nativeCreateMenuBar
  * Signature: ()J
  */
 JNIEXPORT jlong JNICALL
-Java_sun_lwawt_macosx_CMenuBar_nativeCreateMenuBar
-    (JNIEnv *env, jobject peer)
+Java_sun_lwawt_macosx_CMenuBar_nativeCreateMenuBar(JNIEnv *env, jobject peer)
 {
-    CMenuBar *aCMenuBar = nil;
-    JNF_COCOA_ENTER(env);
-
-    jobject cPeerObjGlobal = (*env)->NewGlobalRef(env, peer);
-
-    // We use an array here only to be able to get a return value
-    NSMutableArray *args = [[NSMutableArray alloc] initWithObjects:[NSValue valueWithBytes:&cPeerObjGlobal objCType:@encode(jobject)], nil];
-
-    [ThreadUtilities performOnMainThread:@selector(_create_OnAppKitThread:) on:[CMenuBar alloc] withObject:args waitUntilDone:YES];
+    __block CMenuBar *aCMenuBar = nil;
 
-    aCMenuBar = (CMenuBar *)[args objectAtIndex: 0];
+JNF_COCOA_ENTER(env);
 
-    if (aCMenuBar == nil) {
-        return 0L;
-    }
-
-    // [args release];
-
-    // A strange memory managment after that.
+    jobject cPeerObjGlobal = (*env)->NewGlobalRef(env, peer);
+    [ThreadUtilities performOnMainThreadWaiting:YES block:^() {
+        aCMenuBar = [[CMenuBar alloc] initWithPeer:cPeerObjGlobal];
+    }];
 
+JNF_COCOA_EXIT(env);
 
-    JNF_COCOA_EXIT(env);
     return ptr_to_jlong(aCMenuBar);
 }
 
 /*
  * Class:     sun_lwawt_macosx_CMenuBar