From: Vadim Zeitlin Date: Mon, 24 Jul 2006 18:01:39 +0000 (+0000) Subject: add default value for the encoding parameter of wxMacCFStringHolder() instead of... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/a8d69700fc39bc00a1a897da71dd062a986255aa add default value for the encoding parameter of wxMacCFStringHolder() instead of passing wxLocale::GetSystemEncoding() which doesn't work when wxUSE_INTL == 0 to it in many places (replaces 2nd part of patch 1501724) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40283 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/mac/corefoundation/cfstring.h b/include/wx/mac/corefoundation/cfstring.h index 4024ce62a7..ae3e73d375 100644 --- a/include/wx/mac/corefoundation/cfstring.h +++ b/include/wx/mac/corefoundation/cfstring.h @@ -39,19 +39,20 @@ void wxMacWakeUp() ; 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) { } @@ -75,7 +76,8 @@ public: 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 ) ; @@ -84,7 +86,7 @@ private: CFStringRef m_cfs; bool m_release ; - + DECLARE_NO_COPY_CLASS( wxMacCFStringHolder ) } ; @@ -94,13 +96,13 @@ class wxMacUniCharBuffer { public : wxMacUniCharBuffer( const wxString &str ) ; - + ~wxMacUniCharBuffer() ; - + UniChar* GetBuffer() ; - + UniCharCount GetChars() ; - + private : UniChar* m_ubuf ; UniCharCount m_chars ; diff --git a/src/common/filefn.cpp b/src/common/filefn.cpp index 5824391e0f..16ca60250d 100644 --- a/src/common/filefn.cpp +++ b/src/common/filefn.cpp @@ -883,15 +883,15 @@ wxString wxMacFSRefToPath( const FSRef *fsRef , CFStringRef additionalPathCompon 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 ) @@ -914,7 +914,7 @@ wxString wxMacHFSUniStrToString( ConstHFSUniStr255Param uniname ) uniname->length ); CFMutableStringRef cfMutableString = CFStringCreateMutableCopy(NULL, 0, cfname); CFRelease( cfname ); - CFStringNormalize(cfMutableString,kCFStringNormalizationFormC); + CFStringNormalize(cfMutableString,kCFStringNormalizationFormC); return wxMacCFStringHolder(cfMutableString).AsString() ; } diff --git a/src/mac/corefoundation/cfstring.cpp b/src/mac/corefoundation/cfstring.cpp index 4e71aeee0d..8cfdec84b8 100644 --- a/src/mac/corefoundation/cfstring.cpp +++ b/src/mac/corefoundation/cfstring.cpp @@ -105,9 +105,10 @@ wxUint32 wxMacGetSystemEncFromFontEnc(wxFontEncoding encoding) #if wxUSE_GUI encoding = wxFont::GetDefaultEncoding() ; #else - encoding = wxLocale::GetSystemEncoding() ; + encoding = wxFONTENCODING_SYSTEM; // to be set below #endif } + if ( encoding == wxFONTENCODING_SYSTEM ) { enc = CFStringGetSystemEncoding(); diff --git a/src/mac/corefoundation/utilsexc_base.cpp b/src/mac/corefoundation/utilsexc_base.cpp index db2c9f38a4..a82bcb3ceb 100644 --- a/src/mac/corefoundation/utilsexc_base.cpp +++ b/src/mac/corefoundation/utilsexc_base.cpp @@ -51,10 +51,10 @@ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // -// 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 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -63,8 +63,8 @@ long wxMacExecute(wxChar **argv, 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 @@ -81,18 +81,17 @@ long wxMacExecute(wxChar **argv, 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 @@ -114,7 +113,7 @@ long wxMacExecute(wxChar **argv, 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; @@ -126,42 +125,41 @@ long wxMacExecute(wxChar **argv, 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()) @@ -170,27 +168,26 @@ long wxMacExecute(wxChar **argv, // 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; } @@ -203,7 +200,7 @@ long wxMacExecute(wxChar **argv, ); 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 @@ -211,10 +208,10 @@ long wxMacExecute(wxChar **argv, 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 @@ -224,16 +221,16 @@ long wxMacExecute(wxChar **argv, 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; }