From 120c2766b1a8aee818db95ace74b2ed66ecffad4 Mon Sep 17 00:00:00 2001 From: anthony Date: Tue, 27 Mar 2012 15:53:29 +0400 Subject: [PATCH] 7132692: [macosx] Class com.apple.eawt not functioning Summary: Postpone setting the application delegate until the app is fully initialized Reviewed-by: art --- src/macosx/native/sun/awt/awt.m | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/macosx/native/sun/awt/awt.m b/src/macosx/native/sun/awt/awt.m index c519bebbb..d183d1bc0 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]"); -- GitLab