From: Ryan Norton Date: Fri, 22 Apr 2005 15:19:11 +0000 (+0000) Subject: Move wxMacExecute into base X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/5aba0d3610d33bd060639a640343025433dc3640?ds=inline Move wxMacExecute into base git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33836 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/mac/corefoundation/hid.cpp b/src/mac/corefoundation/hid.cpp index d824a0a0f5..b19859b657 100644 --- a/src/mac/corefoundation/hid.cpp +++ b/src/mac/corefoundation/hid.cpp @@ -568,4 +568,118 @@ bool wxGetKeyState (wxKeyCode key) } } +// +// TODO: Find a better file to put this in +// +#include "wx/intl.h" + +#ifdef __WXCOCOA__ +#include +#include +#else +#include "wx/mac/private.h" +#include "LaunchServices.h" +#endif + +#include "wx/uri.h" +#include "wx/mac/corefoundation/cfstring.h" + +long wxMacExecute(wxChar **argv, + int flags, + wxProcess *process) +{ + CFIndex cfiCount = 0; + //get count + for(wxChar** argvcopy = argv; *argvcopy != NULL ; ++argvcopy) + { + ++cfiCount; + } + + if(cfiCount == 0) //no file to launch? + { + wxLogDebug(wxT("wxMacExecute No file to launch!")); + return -1; + } + + CFURLRef cfurlApp = CFURLCreateWithString( + kCFAllocatorDefault, + wxMacCFStringHolder(*argv++, wxLocale::GetSystemEncoding()), + NULL); + wxASSERT(cfurlApp); + + CFBundleRef cfbApp = CFBundleCreate(kCFAllocatorDefault, cfurlApp); + if(!cfbApp) + { + wxLogDebug(wxT("wxMacExecute Bad bundle")); + CFRelease(cfurlApp); + return -1; + } + + + UInt32 dwBundleType, dwBundleCreator; + CFBundleGetPackageInfo(cfbApp, &dwBundleType, &dwBundleCreator); + + //Only call wxMacExecute for .app bundles - others could be actual unix programs + if(dwBundleType != 'APPL') + { + CFRelease(cfurlApp); + return -1; + } + + // + // We have a good bundle - so let's launch it! + // + + CFMutableArrayRef cfaFiles = CFArrayCreateMutable(kCFAllocatorDefault, cfiCount - 1, NULL); + + wxASSERT(cfaFiles); + + if(--cfiCount) + { + for( ; *argv != NULL ; ++argv) + { +// wxLogDebug(*argv); + wxString sCurrentFile; + + if(wxURI(*argv).IsReference()) + sCurrentFile = wxString(wxT("file://")) + *argv; + else + sCurrentFile = *argv; + + CFURLRef cfurlCurrentFile = CFURLCreateWithString( + kCFAllocatorDefault, + wxMacCFStringHolder(sCurrentFile, wxLocale::GetSystemEncoding()), + NULL); + wxASSERT(cfurlCurrentFile); + + CFArrayAppendValue( + cfaFiles, + cfurlCurrentFile + ); + } + } + + LSLaunchURLSpec launchspec; + launchspec.appURL = cfurlApp; + launchspec.itemURLs = cfaFiles; + launchspec.passThruParams = NULL; //AEDesc* + launchspec.launchFlags = kLSLaunchDefaults | kLSLaunchDontSwitch; //TODO: Possibly be smarter with flags + launchspec.asyncRefCon = NULL; + + OSStatus status = LSOpenFromURLSpec(&launchspec, + NULL); //2nd is CFURLRef* really launched + + //cleanup + CFRelease(cfurlApp); + CFRelease(cfaFiles); + + //check for error + if(status != noErr) + { + wxLogDebug(wxString::Format(wxT("wxMacExecute ERROR: %d")), (int)status); + return -1; + } + return 0; //success +} + #endif //__DARWIN__ diff --git a/src/mac/corefoundation/utilsexc_cf.cpp b/src/mac/corefoundation/utilsexc_cf.cpp index bb6e19d6ed..12f26671c0 100644 --- a/src/mac/corefoundation/utilsexc_cf.cpp +++ b/src/mac/corefoundation/utilsexc_cf.cpp @@ -19,114 +19,6 @@ #include "wx/stdpaths.h" #include "wx/apptrait.h" -#ifdef __WXCOCOA__ -#include -#include -#else -#include "wx/mac/private.h" -#include "LaunchServices.h" -#endif - -#include "wx/uri.h" -#include "wx/mac/corefoundation/cfstring.h" - -long wxMacExecute(wxChar **argv, - int flags, - wxProcess *process) -{ - CFIndex cfiCount = 0; - //get count - for(wxChar** argvcopy = argv; *argvcopy != NULL ; ++argvcopy) - { - ++cfiCount; - } - - if(cfiCount == 0) //no file to launch? - { - wxLogDebug(wxT("wxMacExecute No file to launch!")); - return -1; - } - - CFURLRef cfurlApp = CFURLCreateWithString( - kCFAllocatorDefault, - wxMacCFStringHolder(*argv++, wxLocale::GetSystemEncoding()), - NULL); - wxASSERT(cfurlApp); - - CFBundleRef cfbApp = CFBundleCreate(kCFAllocatorDefault, cfurlApp); - if(!cfbApp) - { - wxLogDebug(wxT("wxMacExecute Bad bundle")); - CFRelease(cfurlApp); - return -1; - } - - - UInt32 dwBundleType, dwBundleCreator; - CFBundleGetPackageInfo(cfbApp, &dwBundleType, &dwBundleCreator); - - //Only call wxMacExecute for .app bundles - others could be actual unix programs - if(dwBundleType != 'APPL') - { - CFRelease(cfurlApp); - return -1; - } - - // - // We have a good bundle - so let's launch it! - // - - CFMutableArrayRef cfaFiles = CFArrayCreateMutable(kCFAllocatorDefault, cfiCount - 1, NULL); - - wxASSERT(cfaFiles); - - if(--cfiCount) - { - for( ; *argv != NULL ; ++argv) - { -// wxLogDebug(*argv); - wxString sCurrentFile; - - if(wxURI(*argv).IsReference()) - sCurrentFile = wxString(wxT("file://")) + *argv; - else - sCurrentFile = *argv; - - CFURLRef cfurlCurrentFile = CFURLCreateWithString( - kCFAllocatorDefault, - wxMacCFStringHolder(sCurrentFile, wxLocale::GetSystemEncoding()), - NULL); - wxASSERT(cfurlCurrentFile); - - CFArrayAppendValue( - cfaFiles, - cfurlCurrentFile - ); - } - } - - LSLaunchURLSpec launchspec; - launchspec.appURL = cfurlApp; - launchspec.itemURLs = cfaFiles; - launchspec.passThruParams = NULL; //AEDesc* - launchspec.launchFlags = kLSLaunchDefaults | kLSLaunchDontSwitch; //TODO: Possibly be smarter with flags - launchspec.asyncRefCon = NULL; - - OSStatus status = LSOpenFromURLSpec(&launchspec, - NULL); //2nd is CFURLRef* really launched - - //cleanup - CFRelease(cfurlApp); - CFRelease(cfaFiles); - - //check for error - if(status != noErr) - { - wxLogDebug(wxString::Format(wxT("wxMacExecute ERROR: %d")), (int)status); - return -1; - } - return 0; //success -} #include