diff --git a/src/macosx/native/sun/awt/awt.m b/src/macosx/native/sun/awt/awt.m index c519bebbb26cff1574d4a3e06b801416a0ab5c61..d183d1bc0262abf3620238344cc894e6623bb92e 100644 --- a/src/macosx/native/sun/awt/awt.m +++ b/src/macosx/native/sun/awt/awt.m @@ -306,6 +306,18 @@ AWT_ASSERT_APPKIT_THREAD; // AWT gets here AFTER +[AWTStarter appKitIsRunning:] is called. if (verbose) AWT_DEBUG_LOG(@"got out of the AppKit startup mutex"); } + + // Don't set the delegate until the NSApplication has been created and + // its finishLaunching has initialized it. + // ApplicationDelegate is the support code for com.apple.eawt. + void (^setDelegateBlock)() = ^(){ + OSXAPP_SetApplicationDelegate([ApplicationDelegate sharedDelegate]); + }; + if (onMainThread) { + setDelegateBlock(); + } else { + [JNFRunLoop performOnMainThreadWaiting:YES withBlock:setDelegateBlock]; + } } - (void)starter:(NSArray*)args { @@ -340,10 +352,6 @@ AWT_ASSERT_APPKIT_THREAD; // AppKit Application. NSApplication *app = [NSApplicationAWT sharedApplication]; - // Don't set the delegate until the NSApplication has been created. - // ApplicationDelegate is the support code for com.apple.eawt. - OSXAPP_SetApplicationDelegate([ApplicationDelegate sharedDelegate]); - // AWT gets to this point BEFORE NSApplicationDidFinishLaunchingNotification is sent. if (![app isRunning]) { if (verbose) AWT_DEBUG_LOG(@"+[AWTStarter startAWT]: ![app isRunning]");