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
This commit is contained in:
Vadim Zeitlin 2006-07-24 18:01:39 +00:00
parent b9eb3d9de6
commit a8d69700fc
4 changed files with 57 additions and 57 deletions

View File

@ -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 ;

View File

@ -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() ;
}

View File

@ -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();

View File

@ -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;
}