KiCad PCB EDA Suite
launch_ext.cpp
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2020 Jon Evans <[email protected]>
5  * Copyright (C) 2020-2021 KiCad Developers, see AUTHORS.txt for contributors.
6  *
7  * This program is free software: you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License as published by the
9  * Free Software Foundation, either version 3 of the License, or (at your
10  * option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program. If not, see <http://www.gnu.org/licenses/>.
19  */
20 
21 #include <launch_ext.h>
22 #include <wx/utils.h>
23 
24 
25 bool LaunchExternal( const wxString& aPath )
26 {
27 #ifdef __WXMAC__
28 
29  const wchar_t* args[] = { L"open", aPath.wc_str(), nullptr };
30  return wxExecute( const_cast<wchar_t**>( args ) ) != -1;
31 
32 #elif defined( __WXGTK__ ) && !wxCHECK_VERSION( 3, 1, 1 )
33  // On Unix systems `wxLaunchDefaultApplication()` before wxWidgets 3.1.1 mistakenly uses
34  // `wxExecute(xdg_open + " " + document)`, thereby failing for filenames with spaces. Below is
35  // a backport of the fixed `wxLaunchDefaultApplication()`, to be used until we switch to a
36  // newer version of wxWidgets.
37 
38  wxString PATH, xdg_open;
39 
40  if( wxGetEnv( wxT( "PATH" ), &PATH ) && wxFindFileInPath( &xdg_open, PATH, wxT( "xdg-open" ) ) )
41  {
42  const char* argv[3];
43  argv[0] = xdg_open.fn_str();
44  argv[1] = aPath.fn_str();
45  argv[2] = nullptr;
46 
47  if( wxExecute( const_cast<char**>( argv ) ) )
48  return true;
49  }
50 
51  return false;
52 
53 #else
54 
55  wxString path( aPath );
56  return wxLaunchDefaultApplication( path );
57 
58 #endif
59 }
bool LaunchExternal(const wxString &aPath)
Launches the given file or folder in the host OS.
Definition: launch_ext.cpp:25