X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/22a35096a0a9c3fe4d3d32b8d68a361126ef9677..5bcdac458c0d5bff7c499ae3c2b7cba40c4ad802:/src/common/utilscmn.cpp diff --git a/src/common/utilscmn.cpp b/src/common/utilscmn.cpp index 911731b7d8..ebfe32dca0 100644 --- a/src/common/utilscmn.cpp +++ b/src/common/utilscmn.cpp @@ -109,97 +109,6 @@ // implementation // ============================================================================ -#if WXWIN_COMPATIBILITY_2_4 - -wxChar * -copystring (const wxChar *s) -{ - if (s == NULL) s = wxEmptyString; - size_t len = wxStrlen (s) + 1; - - wxChar *news = new wxChar[len]; - memcpy (news, s, len * sizeof(wxChar)); // Should be the fastest - - return news; -} - -#endif // WXWIN_COMPATIBILITY_2_4 - -// ---------------------------------------------------------------------------- -// String <-> Number conversions (deprecated) -// ---------------------------------------------------------------------------- - -#if WXWIN_COMPATIBILITY_2_4 - -WXDLLIMPEXP_DATA_BASE(const wxChar *) wxFloatToStringStr = wxT("%.2f"); -WXDLLIMPEXP_DATA_BASE(const wxChar *) wxDoubleToStringStr = wxT("%.2f"); - -void -StringToFloat (const wxChar *s, float *number) -{ - if (s && *s && number) - *number = (float) wxStrtod (s, (wxChar **) NULL); -} - -void -StringToDouble (const wxChar *s, double *number) -{ - if (s && *s && number) - *number = wxStrtod (s, (wxChar **) NULL); -} - -wxChar * -FloatToString (float number, const wxChar *fmt) -{ - static wxChar buf[256]; - - wxSprintf (buf, fmt, number); - return buf; -} - -wxChar * -DoubleToString (double number, const wxChar *fmt) -{ - static wxChar buf[256]; - - wxSprintf (buf, fmt, number); - return buf; -} - -void -StringToInt (const wxChar *s, int *number) -{ - if (s && *s && number) - *number = (int) wxStrtol (s, (wxChar **) NULL, 10); -} - -void -StringToLong (const wxChar *s, long *number) -{ - if (s && *s && number) - *number = wxStrtol (s, (wxChar **) NULL, 10); -} - -wxChar * -IntToString (int number) -{ - static wxChar buf[20]; - - wxSprintf (buf, wxT("%d"), number); - return buf; -} - -wxChar * -LongToString (long number) -{ - static wxChar buf[20]; - - wxSprintf (buf, wxT("%ld"), number); - return buf; -} - -#endif // WXWIN_COMPATIBILITY_2_4 - // Array used in DecToHex conversion routine. static wxChar hexArray[] = wxT("0123456789ABCDEF"); @@ -727,10 +636,13 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags) wxUnusedVar(flags); // set the scheme of url to http if it does not have one + // RR: This doesn't work if the url is just a local path wxString url(urlOrig); - if ( !wxURI(url).HasScheme() ) + wxURI uri(url); + if ( !uri.HasScheme() ) url.Prepend(wxT("http://")); + #if defined(__WXMSW__) #if wxUSE_IPC @@ -738,7 +650,13 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags) { // ShellExecuteEx() opens the URL in an existing window by default so // we can't use it if we need a new window - wxRegKey key(wxRegKey::HKCR, url.BeforeFirst(':') + _T("\\shell\\open")); + wxRegKey key(wxRegKey::HKCR, uri.GetScheme() + _T("\\shell\\open")); + if ( !key.Exists() ) + { + // try default browser, it must be registered at least for http URLs + key.SetName(wxRegKey::HKCR, _T("http\\shell\\open")); + } + if ( key.Exists() ) { wxRegKey keyDDE(key, wxT("DDEExec")); @@ -816,8 +734,8 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags) #elif defined(__WXMAC__) OSStatus err; ICInstance inst; - SInt32 startSel; - SInt32 endSel; + long int startSel; + long int endSel; err = ICStart(&inst, 'STKA'); // put your app creator code here if (err == noErr) @@ -842,11 +760,43 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags) wxLogDebug(wxT("ICStart error %d"), (int) err); return false; } -#elif wxUSE_MIMETYPE - // Non-windows way +#else + // (non-Mac, non-MSW) + +#ifdef __UNIX__ + + wxString desktop = wxTheApp->GetTraits()->GetDesktopEnvironment(); + + // GNOME and KDE desktops have some applications which should be always installed + // together with their main parts, which give us the + if (desktop == wxT("GNOME")) + { + wxArrayString errors; + wxArrayString output; + + // gconf will tell us the path of the application to use as browser + long res = wxExecute( wxT("gconftool-2 --get /desktop/gnome/applications/browser/exec"), + output, errors, wxEXEC_NODISABLE ); + if (res >= 0 && errors.GetCount() == 0) + { + wxString cmd = output[0]; + cmd << _T(' ') << url; + if (wxExecute(cmd)) + return true; + } + } + else if (desktop == wxT("KDE")) + { + // kfmclient directly opens the given URL + if (wxExecute(wxT("kfmclient openURL ") + url)) + return true; + } +#endif + bool ok = false; wxString cmd; +#if wxUSE_MIMETYPE wxFileType *ft = wxTheMimeTypesManager->GetFileTypeFromExtension(_T("html")); if ( ft ) { @@ -856,6 +806,7 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags) ok = ft->GetOpenCommand(&cmd, wxFileType::MessageParameters(url)); delete ft; } +#endif // wxUSE_MIMETYPE if ( !ok || cmd.empty() ) {