]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/utilscmn.cpp
removing additional offset - why did this ever work ?
[wxWidgets.git] / src / common / utilscmn.cpp
index 5ee6713dbf0c8126df0ebf50d5402d8b6a2e171a..7cf1062a5f12db663c0ab1d182a6eb1dd4287cbf 100644 (file)
@@ -729,10 +729,9 @@ 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 0
-    if ( !wxURI(url).HasScheme() )
+    wxURI uri(url);
+    if ( !uri.HasScheme() )
         url.Prepend(wxT("http://"));
-#endif
 
 
 #if defined(__WXMSW__)
@@ -742,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"));
@@ -850,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];
@@ -863,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 )
     {
@@ -877,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() )
     {