X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/89d0cfc9f4f26221e64cdc7a59569d11676d24fc..23a3e8fbda57f0f46bffaef20f461078a07f36c9:/src/common/utilscmn.cpp diff --git a/src/common/utilscmn.cpp b/src/common/utilscmn.cpp index 6a37b6ec9b..7cf1062a5f 100644 --- a/src/common/utilscmn.cpp +++ b/src/common/utilscmn.cpp @@ -729,7 +729,8 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int 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://")); @@ -740,7 +741,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")); @@ -848,11 +855,19 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags) // (non-Mac, non-MSW) #ifdef __UNIX__ - if (wxTheApp->GetTraits()->GetDesktopEnvironment() == wxT("GNOME")) + + 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; - long res = wxExecute( wxT("gconftool-2 --get /desktop/gnome/applications/browser/exec"), output, errors, wxEXEC_NODISABLE ); + + // 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]; @@ -861,11 +876,18 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags) 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 ) { @@ -875,6 +897,7 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags) ok = ft->GetOpenCommand(&cmd, wxFileType::MessageParameters(url)); delete ft; } +#endif // wxUSE_MIMETYPE if ( !ok || cmd.empty() ) {