From 17ede0b11d44bf02e09dce4f3e0e32d594458b0f Mon Sep 17 00:00:00 2001 From: Robert Roebling 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} 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.45.2