From e8d0c6d024f78e36baf4b2ca5b29b1f072db8069 Mon Sep 17 00:00:00 2001 From: jules Date: Mon, 12 Aug 2013 17:13:37 +0100 Subject: [PATCH] Fixes for OSX Process::openDocument when launching bundles with parameters. --- modules/juce_core/native/juce_mac_Files.mm | 55 ++++++++++++---------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/modules/juce_core/native/juce_mac_Files.mm b/modules/juce_core/native/juce_mac_Files.mm index ccd30df2d9..befd4944f5 100644 --- a/modules/juce_core/native/juce_mac_Files.mm +++ b/modules/juce_core/native/juce_mac_Files.mm @@ -393,43 +393,46 @@ bool DirectoryIterator::NativeIterator::next (String& filenameFound, //============================================================================== bool Process::openDocument (const String& fileName, const String& parameters) { - #if JUCE_IOS - return [[UIApplication sharedApplication] openURL: [NSURL URLWithString: juceStringToNS (fileName)]]; - #else JUCE_AUTORELEASEPOOL { + NSURL* filenameAsURL = [NSURL URLWithString: juceStringToNS (fileName)]; + + #if JUCE_IOS + return [[UIApplication sharedApplication] openURL: filenameAsURL]; + #else + NSWorkspace* workspace = [NSWorkspace sharedWorkspace]; + if (parameters.isEmpty()) - { - return [[NSWorkspace sharedWorkspace] openFile: juceStringToNS (fileName)] - || [[NSWorkspace sharedWorkspace] openURL: [NSURL URLWithString: juceStringToNS (fileName)]]; - } + return [workspace openFile: juceStringToNS (fileName)] + || [workspace openURL: filenameAsURL]; - bool ok = false; const File file (fileName); if (file.isBundle()) { - NSMutableArray* urls = [NSMutableArray array]; - - StringArray docs; - docs.addTokens (parameters, true); - for (int i = 0; i < docs.size(); ++i) - [urls addObject: juceStringToNS (docs[i])]; - - ok = [[NSWorkspace sharedWorkspace] openURLs: urls - withAppBundleIdentifier: [[NSBundle bundleWithPath: juceStringToNS (fileName)] bundleIdentifier] - options: 0 - additionalEventParamDescriptor: nil - launchIdentifiers: nil]; - } - else if (file.exists()) - { - ok = FileHelpers::launchExecutable ("\"" + fileName + "\" " + parameters); + StringArray params; + params.addTokens (parameters, true); + + NSMutableArray* paramArray = [[[NSMutableArray alloc] init] autorelease]; + for (int i = 0; i < params.size(); ++i) + [paramArray addObject: juceStringToNS (params[i])]; + + NSMutableDictionary* dict = [[[NSMutableDictionary alloc] init] autorelease]; + [dict setObject: paramArray + forKey: NSWorkspaceLaunchConfigurationArguments]; + + return [workspace launchApplicationAtURL: filenameAsURL + options: NSWorkspaceLaunchDefault | NSWorkspaceLaunchNewInstance + configuration: dict + error: nil]; } - return ok; + if (file.exists()) + return FileHelpers::launchExecutable ("\"" + fileName + "\" " + parameters); + + return false; + #endif } - #endif } void File::revealToUser() const