From 979a73474cf18beb6fa4104dd89dade05ce98c4b Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 2 Aug 2008 21:49:06 +0000 Subject: [PATCH] added trivial wxLaunchDefaultApplication() implementation for wxMac; added a test for it to the exec sample git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54933 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/exec/exec.cpp | 52 ++++++++++++++++++++++++++++++----------- src/common/utilscmn.cpp | 6 ++++- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/samples/exec/exec.cpp b/samples/exec/exec.cpp index 34a8ff5c62..ee51fbdf74 100644 --- a/samples/exec/exec.cpp +++ b/samples/exec/exec.cpp @@ -115,6 +115,7 @@ public: void OnPOpen(wxCommandEvent& event); void OnFileExec(wxCommandEvent& event); + void OnFileLaunch(wxCommandEvent& event); void OnOpenURL(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); @@ -304,6 +305,7 @@ enum Exec_Shell, Exec_POpen, Exec_OpenFile, + Exec_LaunchFile, Exec_OpenURL, Exec_DDEExec, Exec_DDERequest, @@ -344,6 +346,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(Exec_POpen, MyFrame::OnPOpen) EVT_MENU(Exec_OpenFile, MyFrame::OnFileExec) + EVT_MENU(Exec_LaunchFile, MyFrame::OnFileLaunch) EVT_MENU(Exec_OpenURL, MyFrame::OnOpenURL) #ifdef __WINDOWS__ @@ -460,6 +463,8 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) execMenu->AppendSeparator(); execMenu->Append(Exec_OpenFile, _T("Open &file...\tCtrl-F"), _T("Launch the command to open this kind of files")); + execMenu->Append(Exec_LaunchFile, _T("La&unch file...\tShift-Ctrl-F"), + _T("Launch the default application associated with the file")); execMenu->Append(Exec_OpenURL, _T("Open &URL...\tCtrl-U"), _T("Launch the default browser with the given URL")); #ifdef __WINDOWS__ @@ -867,25 +872,33 @@ void MyFrame::OnPOpen(wxCommandEvent& WXUNUSED(event)) new MyPipeFrame(this, cmd, process); } -void MyFrame::OnFileExec(wxCommandEvent& WXUNUSED(event)) -{ - static wxString s_filename; +static wxString gs_lastFile; +static bool AskUserForFileName() +{ wxString filename; #if wxUSE_FILEDLG - filename = wxLoadFileSelector(_T("any file"), wxEmptyString, s_filename, this); + filename = wxLoadFileSelector(_T("any file"), wxEmptyString, gs_lastFile); #else // !wxUSE_FILEDLG filename = wxGetTextFromUser(_T("Enter the file name"), _T("exec sample"), - s_filename, this); + gs_lastFile); #endif // wxUSE_FILEDLG/!wxUSE_FILEDLG if ( filename.empty() ) - return; + return false; - s_filename = filename; + gs_lastFile = filename; - wxString ext = filename.AfterLast(_T('.')); + return true; +} + +void MyFrame::OnFileExec(wxCommandEvent& WXUNUSED(event)) +{ + if ( !AskUserForFileName() ) + return; + + wxString ext = gs_lastFile.AfterLast(_T('.')); wxFileType *ft = wxTheMimeTypesManager->GetFileTypeFromExtension(ext); if ( !ft ) { @@ -896,7 +909,7 @@ void MyFrame::OnFileExec(wxCommandEvent& WXUNUSED(event)) wxString cmd; bool ok = ft->GetOpenCommand(&cmd, - wxFileType::MessageParameters(filename)); + wxFileType::MessageParameters(gs_lastFile)); delete ft; if ( !ok ) { @@ -908,25 +921,36 @@ void MyFrame::OnFileExec(wxCommandEvent& WXUNUSED(event)) DoAsyncExec(cmd); } +void MyFrame::OnFileLaunch(wxCommandEvent& WXUNUSED(event)) +{ + if ( !AskUserForFileName() ) + return; + + if ( !wxLaunchDefaultApplication(gs_lastFile) ) + { + wxLogError("Opening \"%s\" in default application failed.", gs_lastFile); + } +} + void MyFrame::OnOpenURL(wxCommandEvent& WXUNUSED(event)) { - static wxString s_filename(_T("http://www.wxwidgets.org/")); + static wxString s_url(_T("http://www.wxwidgets.org/")); wxString filename = wxGetTextFromUser ( _T("Enter the URL"), _T("exec sample"), - s_filename, + s_url, this ); if ( filename.empty() ) return; - s_filename = filename; + s_url = filename; - if ( !wxLaunchDefaultBrowser(s_filename) ) - wxLogError(_T("Failed to open URL \"%s\""), s_filename.c_str()); + if ( !wxLaunchDefaultBrowser(s_url) ) + wxLogError(_T("Failed to open URL \"%s\""), s_url.c_str()); } // ---------------------------------------------------------------------------- diff --git a/src/common/utilscmn.cpp b/src/common/utilscmn.cpp index c77b3e3743..9b5d7cac6b 100644 --- a/src/common/utilscmn.cpp +++ b/src/common/utilscmn.cpp @@ -941,7 +941,11 @@ bool wxLaunchDefaultApplication(const wxString& document, int flags) { wxUnusedVar(flags); -#if defined(__UNIX__) +#ifdef __WXMAC__ + static const char * const OPEN_CMD = "/usr/bin/open"; + if ( wxFileExists(OPEN_CMD) && wxExecute(OPEN_CMD + " " + document) ) + return true; +#elif defined(__UNIX__) // Our best best is to use xdg-open from freedesktop.org cross-desktop // compatibility suite xdg-utils // (see http://portland.freedesktop.org/wiki/) -- this is installed on -- 2.47.2