From 17ede0b11d44bf02e09dce4f3e0e32d594458b0f Mon Sep 17 00:00:00 2001
From: Robert Roebling <robert@roebling.de>
Date: Mon, 30 Oct 2006 11:46:44 +0000
Subject: [PATCH]   [ 1587059 ] wxLaunchDefaultBrowser fix for KDE

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42712 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 docs/latex/wx/function.tex |  4 ++++
 samples/html/test/test.cpp | 23 ++++++++++++++++++-----
 src/common/utilscmn.cpp    | 18 ++++++++++++++++--
 3 files changed, 38 insertions(+), 7 deletions(-)

diff --git a/docs/latex/wx/function.tex b/docs/latex/wx/function.tex
index 47d46b1b40..2b06d32202 100644
--- a/docs/latex/wx/function.tex
+++ b/docs/latex/wx/function.tex
@@ -3286,6 +3286,10 @@ Open the \arg{url} in user's default browser. If \arg{flags} parameter contains
 
 Returns \true if the application was successfully launched.
 
+Note that for some configurations of the running user, the application which
+is launched to open the given URL may be URL-dependent (e.g. a browser may be used for
+local URLs while another one may be used for remote URLs).
+
 \wxheading{Include files}
 
 <wx/utils.h>
diff --git a/samples/html/test/test.cpp b/samples/html/test/test.cpp
index eeab3617a7..0336006f31 100644
--- a/samples/html/test/test.cpp
+++ b/samples/html/test/test.cpp
@@ -66,7 +66,8 @@ public:
     // event handlers (these functions should _not_ be virtual)
     void OnQuit(wxCommandEvent& event);
     void OnPageOpen(wxCommandEvent& event);
-    void OnDefaultBrowser(wxCommandEvent& event);
+    void OnDefaultLocalBrowser(wxCommandEvent& event);
+    void OnDefaultWebBrowser(wxCommandEvent& event);
     void OnBack(wxCommandEvent& event);
     void OnForward(wxCommandEvent& event);
     void OnProcessor(wxCommandEvent& event);
@@ -108,7 +109,8 @@ enum
 {
     // menu items
     ID_PageOpen = wxID_HIGHEST,
-    ID_DefaultBrowser,
+    ID_DefaultLocalBrowser,
+    ID_DefaultWebBrowser,
     ID_Back,
     ID_Forward,
     ID_Processor
@@ -121,7 +123,8 @@ enum
 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_MENU(wxID_EXIT,  MyFrame::OnQuit)
     EVT_MENU(ID_PageOpen, MyFrame::OnPageOpen)
-    EVT_MENU(ID_DefaultBrowser, MyFrame::OnDefaultBrowser)
+    EVT_MENU(ID_DefaultLocalBrowser, MyFrame::OnDefaultLocalBrowser)
+    EVT_MENU(ID_DefaultWebBrowser, MyFrame::OnDefaultWebBrowser)
     EVT_MENU(ID_Back, MyFrame::OnBack)
     EVT_MENU(ID_Forward, MyFrame::OnForward)
     EVT_MENU(ID_Processor, MyFrame::OnProcessor)
@@ -180,7 +183,8 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
     wxMenu *menuNav = new wxMenu;
 
     menuFile->Append(ID_PageOpen, _("&Open HTML page..."));
-    menuFile->Append(ID_DefaultBrowser, _("&Open current page with default browser"));
+    menuFile->Append(ID_DefaultLocalBrowser, _("&Open current page with default browser"));
+    menuFile->Append(ID_DefaultWebBrowser, _("Open a &web page with default browser"));
     menuFile->AppendSeparator();
     menuFile->Append(ID_Processor, _("&Remove bold attribute"),
                      wxEmptyString, wxITEM_CHECK);
@@ -260,7 +264,7 @@ void MyFrame::OnPageOpen(wxCommandEvent& WXUNUSED(event))
 #endif // wxUSE_FILEDLG
 }
 
-void MyFrame::OnDefaultBrowser(wxCommandEvent& WXUNUSED(event))
+void MyFrame::OnDefaultLocalBrowser(wxCommandEvent& WXUNUSED(event))
 {
     wxString page = m_Html->GetOpenedPage();
     if (!page.empty())
@@ -269,6 +273,15 @@ void MyFrame::OnDefaultBrowser(wxCommandEvent& WXUNUSED(event))
     }
 }
 
+void MyFrame::OnDefaultWebBrowser(wxCommandEvent& WXUNUSED(event))
+{
+    wxString page = m_Html->GetOpenedPage();
+    if (!page.empty())
+    {
+        wxLaunchDefaultBrowser(wxT("http://www.google.com"));
+    }
+}
+
 void MyFrame::OnBack(wxCommandEvent& WXUNUSED(event))
 {
     if (!m_Html->HistoryBack())
diff --git a/src/common/utilscmn.cpp b/src/common/utilscmn.cpp
index daaa20101a..7cf1062a5f 100644
--- a/src/common/utilscmn.cpp
+++ b/src/common/utilscmn.cpp
@@ -855,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];
@@ -868,6 +876,12 @@ 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;
-- 
2.50.0

