60 lines
1.9 KiB
C++
60 lines
1.9 KiB
C++
/*
|
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
|
*
|
|
* Copyright (C) 2020 Jon Evans <jon@craftyjon.com>
|
|
* Copyright (C) 2020-2021 KiCad Developers, see AUTHORS.txt for contributors.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation, either version 3 of the License, or (at your
|
|
* option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <launch_ext.h>
|
|
#include <wx/utils.h>
|
|
|
|
|
|
bool LaunchExternal( const wxString& aPath )
|
|
{
|
|
#ifdef __WXMAC__
|
|
|
|
const wchar_t* args[] = { L"open", aPath.wc_str(), nullptr };
|
|
return wxExecute( const_cast<wchar_t**>( args ) ) != -1;
|
|
|
|
#elif defined( __WXGTK__ ) && !wxCHECK_VERSION( 3, 1, 1 )
|
|
// On Unix systems `wxLaunchDefaultApplication()` before wxWidgets 3.1.1 mistakenly uses
|
|
// `wxExecute(xdg_open + " " + document)`, thereby failing for filenames with spaces. Below is
|
|
// a backport of the fixed `wxLaunchDefaultApplication()`, to be used until we switch to a
|
|
// newer version of wxWidgets.
|
|
|
|
wxString PATH, xdg_open;
|
|
|
|
if( wxGetEnv( wxT( "PATH" ), &PATH ) && wxFindFileInPath( &xdg_open, PATH, wxT( "xdg-open" ) ) )
|
|
{
|
|
const char* argv[3];
|
|
argv[0] = xdg_open.fn_str();
|
|
argv[1] = aPath.fn_str();
|
|
argv[2] = nullptr;
|
|
|
|
if( wxExecute( const_cast<char**>( argv ) ) )
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
|
|
#else
|
|
|
|
wxString path( aPath );
|
|
return wxLaunchDefaultApplication( path );
|
|
|
|
#endif
|
|
}
|