Fix for broken wxMSWUniv after wxLaunchDefaultBrowser introduction. Source cleaning (should not happen in new code).
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33879 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
3bce55ac06
commit
657a7545e0
@ -122,13 +122,13 @@
|
|||||||
wxChar *
|
wxChar *
|
||||||
copystring (const wxChar *s)
|
copystring (const wxChar *s)
|
||||||
{
|
{
|
||||||
if (s == NULL) s = wxEmptyString;
|
if (s == NULL) s = wxEmptyString;
|
||||||
size_t len = wxStrlen (s) + 1;
|
size_t len = wxStrlen (s) + 1;
|
||||||
|
|
||||||
wxChar *news = new wxChar[len];
|
wxChar *news = new wxChar[len];
|
||||||
memcpy (news, s, len * sizeof(wxChar)); // Should be the fastest
|
memcpy (news, s, len * sizeof(wxChar)); // Should be the fastest
|
||||||
|
|
||||||
return news;
|
return news;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // WXWIN_COMPATIBILITY_2_4
|
#endif // WXWIN_COMPATIBILITY_2_4
|
||||||
@ -145,65 +145,65 @@ WXDLLIMPEXP_DATA_BASE(const wxChar *) wxDoubleToStringStr = wxT("%.2f");
|
|||||||
void
|
void
|
||||||
StringToFloat (const wxChar *s, float *number)
|
StringToFloat (const wxChar *s, float *number)
|
||||||
{
|
{
|
||||||
if (s && *s && number)
|
if (s && *s && number)
|
||||||
*number = (float) wxStrtod (s, (wxChar **) NULL);
|
*number = (float) wxStrtod (s, (wxChar **) NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
StringToDouble (const wxChar *s, double *number)
|
StringToDouble (const wxChar *s, double *number)
|
||||||
{
|
{
|
||||||
if (s && *s && number)
|
if (s && *s && number)
|
||||||
*number = wxStrtod (s, (wxChar **) NULL);
|
*number = wxStrtod (s, (wxChar **) NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxChar *
|
wxChar *
|
||||||
FloatToString (float number, const wxChar *fmt)
|
FloatToString (float number, const wxChar *fmt)
|
||||||
{
|
{
|
||||||
static wxChar buf[256];
|
static wxChar buf[256];
|
||||||
|
|
||||||
wxSprintf (buf, fmt, number);
|
wxSprintf (buf, fmt, number);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxChar *
|
wxChar *
|
||||||
DoubleToString (double number, const wxChar *fmt)
|
DoubleToString (double number, const wxChar *fmt)
|
||||||
{
|
{
|
||||||
static wxChar buf[256];
|
static wxChar buf[256];
|
||||||
|
|
||||||
wxSprintf (buf, fmt, number);
|
wxSprintf (buf, fmt, number);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
StringToInt (const wxChar *s, int *number)
|
StringToInt (const wxChar *s, int *number)
|
||||||
{
|
{
|
||||||
if (s && *s && number)
|
if (s && *s && number)
|
||||||
*number = (int) wxStrtol (s, (wxChar **) NULL, 10);
|
*number = (int) wxStrtol (s, (wxChar **) NULL, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
StringToLong (const wxChar *s, long *number)
|
StringToLong (const wxChar *s, long *number)
|
||||||
{
|
{
|
||||||
if (s && *s && number)
|
if (s && *s && number)
|
||||||
*number = wxStrtol (s, (wxChar **) NULL, 10);
|
*number = wxStrtol (s, (wxChar **) NULL, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxChar *
|
wxChar *
|
||||||
IntToString (int number)
|
IntToString (int number)
|
||||||
{
|
{
|
||||||
static wxChar buf[20];
|
static wxChar buf[20];
|
||||||
|
|
||||||
wxSprintf (buf, wxT("%d"), number);
|
wxSprintf (buf, wxT("%d"), number);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxChar *
|
wxChar *
|
||||||
LongToString (long number)
|
LongToString (long number)
|
||||||
{
|
{
|
||||||
static wxChar buf[20];
|
static wxChar buf[20];
|
||||||
|
|
||||||
wxSprintf (buf, wxT("%ld"), number);
|
wxSprintf (buf, wxT("%ld"), number);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // WXWIN_COMPATIBILITY_2_4
|
#endif // WXWIN_COMPATIBILITY_2_4
|
||||||
@ -214,29 +214,29 @@ static wxChar hexArray[] = wxT("0123456789ABCDEF");
|
|||||||
// Convert 2-digit hex number to decimal
|
// Convert 2-digit hex number to decimal
|
||||||
int wxHexToDec(const wxString& buf)
|
int wxHexToDec(const wxString& buf)
|
||||||
{
|
{
|
||||||
int firstDigit, secondDigit;
|
int firstDigit, secondDigit;
|
||||||
|
|
||||||
if (buf.GetChar(0) >= wxT('A'))
|
if (buf.GetChar(0) >= wxT('A'))
|
||||||
firstDigit = buf.GetChar(0) - wxT('A') + 10;
|
firstDigit = buf.GetChar(0) - wxT('A') + 10;
|
||||||
else
|
else
|
||||||
firstDigit = buf.GetChar(0) - wxT('0');
|
firstDigit = buf.GetChar(0) - wxT('0');
|
||||||
|
|
||||||
if (buf.GetChar(1) >= wxT('A'))
|
if (buf.GetChar(1) >= wxT('A'))
|
||||||
secondDigit = buf.GetChar(1) - wxT('A') + 10;
|
secondDigit = buf.GetChar(1) - wxT('A') + 10;
|
||||||
else
|
else
|
||||||
secondDigit = buf.GetChar(1) - wxT('0');
|
secondDigit = buf.GetChar(1) - wxT('0');
|
||||||
|
|
||||||
return (firstDigit & 0xF) * 16 + (secondDigit & 0xF );
|
return (firstDigit & 0xF) * 16 + (secondDigit & 0xF );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert decimal integer to 2-character hex string
|
// Convert decimal integer to 2-character hex string
|
||||||
void wxDecToHex(int dec, wxChar *buf)
|
void wxDecToHex(int dec, wxChar *buf)
|
||||||
{
|
{
|
||||||
int firstDigit = (int)(dec/16.0);
|
int firstDigit = (int)(dec/16.0);
|
||||||
int secondDigit = (int)(dec - (firstDigit*16.0));
|
int secondDigit = (int)(dec - (firstDigit*16.0));
|
||||||
buf[0] = hexArray[firstDigit];
|
buf[0] = hexArray[firstDigit];
|
||||||
buf[1] = hexArray[secondDigit];
|
buf[1] = hexArray[secondDigit];
|
||||||
buf[2] = 0;
|
buf[2] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert decimal integer to 2-character hex string
|
// Convert decimal integer to 2-character hex string
|
||||||
@ -539,7 +539,8 @@ bool wxLaunchDefaultBrowser(const wxString& url)
|
|||||||
if(wxURI(url).IsReference())
|
if(wxURI(url).IsReference())
|
||||||
finalurl = wxString(wxT("http://")) + url;
|
finalurl = wxString(wxT("http://")) + url;
|
||||||
|
|
||||||
#ifdef __WINDOWS__
|
#if defined(__WXMSW__) && wxUSE_CONFIG_NATIVE
|
||||||
|
|
||||||
wxString command;
|
wxString command;
|
||||||
|
|
||||||
// ShellExecute() always opens in the same window,
|
// ShellExecute() always opens in the same window,
|
||||||
@ -550,58 +551,58 @@ bool wxLaunchDefaultBrowser(const wxString& url)
|
|||||||
wxRegKey keyDDE(key, wxT("DDEExec"));
|
wxRegKey keyDDE(key, wxT("DDEExec"));
|
||||||
if ( keyDDE.Exists() )
|
if ( keyDDE.Exists() )
|
||||||
{
|
{
|
||||||
wxString ddeTopic = wxRegKey(keyDDE, wxT("topic"));
|
wxString ddeTopic = wxRegKey(keyDDE, wxT("topic"));
|
||||||
|
|
||||||
// we only know the syntax of WWW_OpenURL DDE request
|
// we only know the syntax of WWW_OpenURL DDE request
|
||||||
if ( ddeTopic == wxT("WWW_OpenURL") )
|
if ( ddeTopic == wxT("WWW_OpenURL") )
|
||||||
{
|
{
|
||||||
wxString ddeCmd = keyDDE;
|
wxString ddeCmd = keyDDE;
|
||||||
|
|
||||||
// this is a bit naive but should work as -1 can't appear
|
// this is a bit naive but should work as -1 can't appear
|
||||||
// elsewhere in the DDE topic, normally
|
// elsewhere in the DDE topic, normally
|
||||||
if ( ddeCmd.Replace(wxT("-1"), wxT("0"),
|
if ( ddeCmd.Replace(wxT("-1"), wxT("0"),
|
||||||
FALSE /* only first occurence */) == 1 )
|
false /* only first occurence */) == 1 )
|
||||||
{
|
{
|
||||||
// and also replace the parameters
|
// and also replace the parameters
|
||||||
if ( ddeCmd.Replace(wxT("%1"), url, FALSE) == 1 )
|
if ( ddeCmd.Replace(wxT("%1"), url, false) == 1 )
|
||||||
{
|
{
|
||||||
// magic incantation understood by wxMSW
|
// magic incantation understood by wxMSW
|
||||||
command << wxT("WX_DDE#")
|
command << wxT("WX_DDE#")
|
||||||
<< wxRegKey(key, wxT("command")).QueryDefaultValue() << wxT('#')
|
<< wxRegKey(key, wxT("command")).QueryDefaultValue() << wxT('#')
|
||||||
<< wxRegKey(keyDDE, wxT("application")).QueryDefaultValue()
|
<< wxRegKey(keyDDE, wxT("application")).QueryDefaultValue()
|
||||||
<< wxT('#') << ddeTopic << wxT('#')
|
<< wxT('#') << ddeTopic << wxT('#')
|
||||||
<< ddeCmd;
|
<< ddeCmd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Try wxExecute - if it doesn't work or the regkey stuff
|
//Try wxExecute - if it doesn't work or the regkey stuff
|
||||||
//above failed, fallback to opening the file in the same
|
//above failed, fallback to opening the file in the same
|
||||||
//browser window
|
//browser window
|
||||||
if ( command.empty() || wxExecute(command) == -1)
|
if ( command.empty() || wxExecute(command) == -1)
|
||||||
{
|
{
|
||||||
// CYGWIN and MINGW may have problems - so load ShellExecute
|
// CYGWIN and MINGW may have problems - so load ShellExecute
|
||||||
// dynamically
|
// dynamically
|
||||||
typedef HINSTANCE (*LPShellExecute)(HWND hwnd, const wxChar* lpOperation,
|
typedef HINSTANCE (*LPShellExecute)(HWND hwnd, const wxChar* lpOperation,
|
||||||
const wxChar* lpFile,
|
const wxChar* lpFile,
|
||||||
const wxChar* lpParameters,
|
const wxChar* lpParameters,
|
||||||
const wxChar* lpDirectory,
|
const wxChar* lpDirectory,
|
||||||
INT nShowCmd);
|
INT nShowCmd);
|
||||||
|
|
||||||
HINSTANCE hShellDll = ::LoadLibrary(wxT("shell32.dll"));
|
HINSTANCE hShellDll = ::LoadLibrary(wxT("shell32.dll"));
|
||||||
if(hShellDll == NULL)
|
if(hShellDll == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
LPShellExecute lpShellExecute =
|
LPShellExecute lpShellExecute =
|
||||||
(LPShellExecute) ::GetProcAddress(hShellDll,
|
(LPShellExecute) ::GetProcAddress(hShellDll,
|
||||||
wxString::Format(wxT("ShellExecute%s"),
|
wxString::Format(wxT("ShellExecute%s"),
|
||||||
|
|
||||||
#ifdef __WXUNICODE__
|
#ifdef __WXUNICODE__
|
||||||
wxT("W")
|
wxT("W")
|
||||||
#else
|
#else
|
||||||
wxT("A")
|
wxT("A")
|
||||||
#endif
|
#endif
|
||||||
#ifdef __WXWINCE__
|
#ifdef __WXWINCE__
|
||||||
)
|
)
|
||||||
@ -609,13 +610,13 @@ bool wxLaunchDefaultBrowser(const wxString& url)
|
|||||||
).mb_str(wxConvLocal)
|
).mb_str(wxConvLocal)
|
||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
if(lpShellExecute == NULL)
|
if(lpShellExecute == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Windows sometimes doesn't open the browser correctly when using mime
|
// Windows sometimes doesn't open the browser correctly when using mime
|
||||||
// types, so do ShellExecute - i.e. start <url> (from James Carroll)
|
// types, so do ShellExecute - i.e. start <url> (from James Carroll)
|
||||||
unsigned int nResult = (int) (*lpShellExecute)(NULL, NULL, finalurl.c_str(),
|
unsigned int nResult = (int) (*lpShellExecute)(NULL, NULL, finalurl.c_str(),
|
||||||
NULL, wxT(""), SW_SHOWNORMAL);
|
NULL, wxT(""), SW_SHOWNORMAL);
|
||||||
|
|
||||||
// Unload Shell32.dll
|
// Unload Shell32.dll
|
||||||
::FreeLibrary(hShellDll);
|
::FreeLibrary(hShellDll);
|
||||||
@ -624,37 +625,33 @@ bool wxLaunchDefaultBrowser(const wxString& url)
|
|||||||
// from Angelo Mandato's wxHyperlinksCtrl
|
// from Angelo Mandato's wxHyperlinksCtrl
|
||||||
// HINSTANCE_ERROR == 32
|
// HINSTANCE_ERROR == 32
|
||||||
if (nResult <= HINSTANCE_ERROR && nResult != SE_ERR_FNF)
|
if (nResult <= HINSTANCE_ERROR && nResult != SE_ERR_FNF)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
# ifdef __WXDEBUG__
|
#ifdef __WXDEBUG__
|
||||||
// Log something if SE_ERR_FNF happens
|
// Log something if SE_ERR_FNF happens
|
||||||
if(nResult == SE_ERR_FNF)
|
if(nResult == SE_ERR_FNF)
|
||||||
wxLogDebug(wxT("Got SE_ERR_FNF from ShellExecute - maybe FireFox"));
|
wxLogDebug(wxT("Got SE_ERR_FNF from ShellExecute - maybe FireFox"));
|
||||||
# endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif wxUSE_MIMETYPE
|
||||||
|
|
||||||
#else
|
|
||||||
#if wxUSE_MIMETYPE
|
|
||||||
// Non-windows way
|
// Non-windows way
|
||||||
wxFileType *ft =
|
wxFileType *ft = wxTheMimeTypesManager->GetFileTypeFromExtension (_T("html"));
|
||||||
wxTheMimeTypesManager->GetFileTypeFromExtension (_T("html"));
|
if (!ft)
|
||||||
if (!ft)
|
{
|
||||||
{
|
wxLogError(_T("No default application can open .html extension"));
|
||||||
wxLogError(_T("No default application can open .html extension"));
|
return false;
|
||||||
return false;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
wxString mt;
|
wxString mt;
|
||||||
ft->GetMimeType(&mt);
|
ft->GetMimeType(&mt);
|
||||||
|
|
||||||
wxString cmd;
|
wxString cmd;
|
||||||
bool ok =
|
bool ok = ft->GetOpenCommand (&cmd, wxFileType::MessageParameters(finalurl));
|
||||||
ft->GetOpenCommand (&cmd,
|
delete ft;
|
||||||
wxFileType::MessageParameters (finalurl.c_str(),
|
|
||||||
_T("")));
|
if (ok)
|
||||||
delete ft;
|
|
||||||
|
|
||||||
if (ok)
|
|
||||||
{
|
{
|
||||||
if( wxExecute (cmd, wxEXEC_ASYNC) == -1 )
|
if( wxExecute (cmd, wxEXEC_ASYNC) == -1 )
|
||||||
{
|
{
|
||||||
@ -663,10 +660,11 @@ bool wxLaunchDefaultBrowser(const wxString& url)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
#else
|
|
||||||
return false;
|
#else // !wxUSE_MIMETYPE && !(WXMSW && wxUSE_NATIVE_CONFIG)
|
||||||
#endif //!wxUSE_MIMETYPE
|
|
||||||
|
return false;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user