src/macosx/native/sun/awt/CMenu.m
Print this page
@@ -36,11 +36,11 @@
@implementation CMenu
- (id)initWithPeer:(jobject)peer {
AWT_ASSERT_APPKIT_THREAD;
// Create the new NSMenu
- self = [super initWithPeer:peer asSeparator:[NSNumber numberWithBool:NO]];
+ self = [super initWithPeer:peer asSeparator:NO];
if (self) {
fMenu = [NSMenu javaMenuWithTitle:@""];
[fMenu retain];
[fMenu setAutoenablesItems:NO];
}
@@ -51,22 +51,10 @@
[fMenu release];
fMenu = nil;
[super dealloc];
}
-- (void)addJavaSubmenu:(CMenu *)submenu {
- [ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) on:self withObject:submenu waitUntilDone:YES];
-}
-
-- (void)addJavaMenuItem:(CMenuItem *)theMenuItem {
- [ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) on:self withObject:theMenuItem waitUntilDone:YES];
-}
-
-- (void)addNativeItem_OnAppKitThread:(CMenuItem *)itemModified {
-AWT_ASSERT_APPKIT_THREAD;
- [itemModified addNSMenuItemToMenu:[self menu]];
-}
- (void)setJavaMenuTitle:(NSString *)title {
if (title) {
[ThreadUtilities performOnMainThread:@selector(setNativeMenuTitle_OnAppKitThread:) on:self withObject:title waitUntilDone:YES];
@@ -131,23 +119,14 @@
@end
CMenu * createCMenu (jobject cPeerObjGlobal) {
- CMenu *aCMenu = nil;
-
- // 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:[CMenu alloc] withObject:args waitUntilDone:YES];
-
- aCMenu = (CMenu *)[args objectAtIndex: 0];
-
- if (aCMenu == nil) {
- return 0L;
- }
-
+ __block CMenu *aCMenu = nil;
+ [ThreadUtilities performOnMainThreadWaiting:YES block:^() {
+ aCMenu = [[CMenu alloc] initWithPeer:cPeerObjGlobal];
+ }];
return aCMenu;
}
/*
@@ -155,21 +134,22 @@
* Method: nativeCreateSubMenu
* Signature: (J)J
*/
JNIEXPORT jlong JNICALL
Java_sun_lwawt_macosx_CMenu_nativeCreateSubMenu
-(JNIEnv *env, jobject peer, jlong parentMenu)
+(JNIEnv *env, jobject peer, jlong jParentMenu)
{
- CMenu *aCMenu = nil;
+ __block CMenu *aCMenu = nil;
+ CMenu* parentMenu = (CMenu *)jlong_to_ptr(jParentMenu);
+
JNF_COCOA_ENTER(env);
jobject cPeerObjGlobal = (*env)->NewGlobalRef(env, peer);
-
- aCMenu = createCMenu (cPeerObjGlobal);
-
- // Add it to the parent menu
- [((CMenu *)jlong_to_ptr(parentMenu)) addJavaSubmenu: aCMenu];
+ [ThreadUtilities performOnMainThreadWaiting:YES block:^() {
+ aCMenu = [[CMenu alloc] initWithPeer:cPeerObjGlobal];
+ [aCMenu addNSMenuItemToMenu:[parentMenu menu]];
+ }];
JNF_COCOA_EXIT(env);
return ptr_to_jlong(aCMenu);
}
@@ -181,20 +161,20 @@
* Method: nativeCreateMenu
* Signature: (JZ)J
*/
JNIEXPORT jlong JNICALL
Java_sun_lwawt_macosx_CMenu_nativeCreateMenu
-(JNIEnv *env, jobject peer,
- jlong parentMenuBar, jboolean isHelpMenu, jint insertLocation)
+(JNIEnv *env, jobject peer, jlong parentMenuBar, jboolean isHelpMenu, jint insertLocation)
{
- CMenu *aCMenu = nil;
+ __block CMenu *aCMenu = nil;
CMenuBar *parent = (CMenuBar *)jlong_to_ptr(parentMenuBar);
JNF_COCOA_ENTER(env);
jobject cPeerObjGlobal = (*env)->NewGlobalRef(env, peer);
-
- aCMenu = createCMenu (cPeerObjGlobal);
+ [ThreadUtilities performOnMainThreadWaiting:YES block:^() {
+ aCMenu = [[CMenu alloc] initWithPeer:cPeerObjGlobal];
+ }];
// Add it to the menu bar.
[parent javaAddMenu:aCMenu atIndex:insertLocation];
// If the menu is already the help menu (because we are creating an entire