class wxMacCFStringHolder
{
public:
- wxMacCFStringHolder()
- : m_cfs(NULL) , m_release(false)
+ wxMacCFStringHolder()
+ : m_cfs(NULL) , m_release(false)
{
}
- wxMacCFStringHolder(const wxString &str , wxFontEncoding encoding )
- : m_cfs(NULL) , m_release(false)
+ wxMacCFStringHolder(const wxString &str,
+ wxFontEncoding encoding = wxFONTENCODING_DEFAULT)
+ : m_cfs(NULL) , m_release(false)
{
Assign( str , encoding ) ;
}
wxMacCFStringHolder(CFStringRef ref , bool release = true )
- : m_cfs(ref) , m_release(release)
+ : m_cfs(ref) , m_release(release)
{
}
m_cfs = NULL ;
}
- void Assign( const wxString &str , wxFontEncoding encoding ) ;
+ void Assign(const wxString &str,
+ wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
operator CFStringRef () const { return m_cfs; }
wxString AsString( wxFontEncoding encoding = wxFONTENCODING_DEFAULT ) ;
CFStringRef m_cfs;
bool m_release ;
-
+
DECLARE_NO_COPY_CLASS( wxMacCFStringHolder )
} ;
{
public :
wxMacUniCharBuffer( const wxString &str ) ;
-
+
~wxMacUniCharBuffer() ;
-
+
UniChar* GetBuffer() ;
-
+
UniCharCount GetChars() ;
-
+
private :
UniChar* m_ubuf ;
UniCharCount m_chars ;
CFRelease( fullURLRef ) ;
CFMutableStringRef cfMutableString = CFStringCreateMutableCopy(NULL, 0, cfString);
CFRelease( cfString );
- CFStringNormalize(cfMutableString,kCFStringNormalizationFormC);
- return wxMacCFStringHolder(cfMutableString).AsString(wxLocale::GetSystemEncoding());
+ CFStringNormalize(cfMutableString,kCFStringNormalizationFormC);
+ return wxMacCFStringHolder(cfMutableString).AsString();
}
OSStatus wxMacPathToFSRef( const wxString&path , FSRef *fsRef )
{
OSStatus err = noErr ;
- CFMutableStringRef cfMutableString = CFStringCreateMutableCopy(NULL, 0, wxMacCFStringHolder(path ,wxLocale::GetSystemEncoding() ) ) ;
- CFStringNormalize(cfMutableString,kCFStringNormalizationFormD);
+ CFMutableStringRef cfMutableString = CFStringCreateMutableCopy(NULL, 0, wxMacCFStringHolder(path));
+ CFStringNormalize(cfMutableString,kCFStringNormalizationFormD);
CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, cfMutableString , kDefaultPathStyle, false);
CFRelease( cfMutableString );
if ( NULL != url )
uniname->length );
CFMutableStringRef cfMutableString = CFStringCreateMutableCopy(NULL, 0, cfname);
CFRelease( cfname );
- CFStringNormalize(cfMutableString,kCFStringNormalizationFormC);
+ CFStringNormalize(cfMutableString,kCFStringNormalizationFormC);
return wxMacCFStringHolder(cfMutableString).AsString() ;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
-// wxMacExecute
+// wxMacExecute
//
// argv is the command line split up, with the application path first
-// flags are the flags from wxExecute
+// flags are the flags from wxExecute
// process is the process passed from wxExecute for pipe streams etc.
// returns -1 on error for wxEXEC_SYNC and 0 on error for wxEXEC_ASYNC
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
wxProcess *process)
{
// Semi-macros used for return value of wxMacExecute
- const long errorCode = ((flags & wxEXEC_SYNC) ? -1 : 0);
- const long successCode = ((flags & wxEXEC_SYNC) ? 0 : -1); // fake PID
+ const long errorCode = ((flags & wxEXEC_SYNC) ? -1 : 0);
+ const long successCode = ((flags & wxEXEC_SYNC) ? 0 : -1); // fake PID
// Obtains the number of arguments for determining the size of
// the CFArray used to hold them
wxLogDebug(wxT("wxMacExecute No file to launch!"));
return errorCode ;
}
-
+
// Path to bundle
wxString path = *argv++;
// Create a CFURL for the application path
// Created this way because we are opening a bundle which is a directory
- CFURLRef cfurlApp =
+ CFURLRef cfurlApp =
CFURLCreateWithFileSystemPath(
kCFAllocatorDefault,
- wxMacCFStringHolder(path,
- wxLocale::GetSystemEncoding()),
- kDefaultPathStyle,
+ wxMacCFStringHolder(path),
+ kDefaultPathStyle,
true); //false == not a directory
// Check for error from the CFURL
CFRelease(cfurlApp);
return errorCode ;
}
-
+
// Get the bundle type and make sure its an 'APPL' bundle
// Otherwise we're dealing with something else here...
UInt32 dwBundleType, dwBundleCreator;
CFRelease(cfurlApp);
return errorCode ;
}
-
+
// Create a CFArray for dealing with the command line
// arguments to the bundle
- CFMutableArrayRef cfaFiles = CFArrayCreateMutable(kCFAllocatorDefault,
+ CFMutableArrayRef cfaFiles = CFArrayCreateMutable(kCFAllocatorDefault,
cfiCount-1, &kCFTypeArrayCallBacks);
if(!cfaFiles) //This should never happen
{
- wxLogDebug(wxT("wxMacExecute Could not create CFMutableArray"));
+ wxLogDebug(wxT("wxMacExecute Could not create CFMutableArray"));
CFRelease(cfbApp);
CFRelease(cfurlApp);
return errorCode ;
}
-
+
// Loop through command line arguments to the bundle,
// turn them into CFURLs and then put them in cfaFiles
// For use to launch services call
for( ; *argv != NULL ; ++argv)
{
- // Check for '<' as this will ring true for
+ // Check for '<' as this will ring true for
// CFURLCreateWithString but is generally not considered
// typical on mac but is usually passed here from wxExecute
if (wxStrcmp(*argv, wxT("<")) == 0)
continue;
-
-
- CFURLRef cfurlCurrentFile; // CFURL to hold file path
- wxFileName argfn(*argv); // Filename for path
-
+
+
+ CFURLRef cfurlCurrentFile; // CFURL to hold file path
+ wxFileName argfn(*argv); // Filename for path
+
if(argfn.DirExists())
{
// First, try creating as a directory
cfurlCurrentFile = CFURLCreateWithFileSystemPath(
kCFAllocatorDefault,
- wxMacCFStringHolder(*argv,
- wxLocale::GetSystemEncoding()),
- kDefaultPathStyle,
+ wxMacCFStringHolder(*argv),
+ kDefaultPathStyle,
true); //true == directory
}
else if(argfn.FileExists())
// as a regular file
cfurlCurrentFile = CFURLCreateWithFileSystemPath(
kCFAllocatorDefault,
- wxMacCFStringHolder(*argv,
- wxLocale::GetSystemEncoding()),
- kDefaultPathStyle,
+ wxMacCFStringHolder(*argv),
+ kDefaultPathStyle,
false); //false == regular file
- }
+ }
else
{
// Argument did not refer to
// an entry in the local filesystem,
// so try creating it through CFURLCreateWithString
cfurlCurrentFile = CFURLCreateWithString(
- kCFAllocatorDefault,
- wxMacCFStringHolder(*argv, wxLocale::GetSystemEncoding()),
- NULL);
+ kCFAllocatorDefault,
+ wxMacCFStringHolder(*argv),
+ NULL);
}
-
+
// Continue in the loop if the CFURL could not be created
if(!cfurlCurrentFile)
{
wxLogDebug(
- wxT("wxMacExecute Could not create CFURL for argument:%s"),
+ wxT("wxMacExecute Could not create CFURL for argument:%s"),
*argv);
continue;
}
);
CFRelease(cfurlCurrentFile); // array has retained it
}
-
+
// Create a LSLaunchURLSpec for use with LSOpenFromURLSpec
// Note that there are several flag options (launchFlags) such
// as kLSLaunchDontSwitch etc. and maybe we could be more
LSLaunchURLSpec launchspec;
launchspec.appURL = cfurlApp;
launchspec.itemURLs = cfaFiles;
- launchspec.passThruParams = NULL; //AEDesc*
- launchspec.launchFlags = kLSLaunchDefaults;
+ launchspec.passThruParams = NULL; //AEDesc*
+ launchspec.launchFlags = kLSLaunchDefaults;
launchspec.asyncRefCon = NULL;
-
+
// Finally, call LSOpenFromURL spec with our arguments
// 2nd parameter is a pointer to a CFURL that gets
// the actual path launched by the function
CFRelease(cfbApp);
CFRelease(cfurlApp);
CFRelease(cfaFiles);
-
+
// Check for error from LSOpenFromURLSpec
if(status != noErr)
{
- wxLogDebug(wxT("wxMacExecute LSOpenFromURLSpec Error: %d"),
+ wxLogDebug(wxT("wxMacExecute LSOpenFromURLSpec Error: %d"),
(int)status);
return errorCode ;
}
-
+
// No error from LSOpenFromURLSpec, so app was launched
- return successCode;
+ return successCode;
}