X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fopenuri.cc;h=0d744ae50d56bac379296865988eb01ac670cd5a;hb=e3690cf6530a6a4dd8bec893b82b517af415fbb5;hp=7c51dc55e930c8b46987915897967af3c7890667;hpb=6ef5d85ae1f2c500c4163cd1df580b3f26991c1e;p=ardour.git diff --git a/libs/pbd/openuri.cc b/libs/pbd/openuri.cc index 7c51dc55e9..0d744ae50d 100644 --- a/libs/pbd/openuri.cc +++ b/libs/pbd/openuri.cc @@ -1,28 +1,98 @@ +/* + Copyright (C) 2012 Paul Davis + + 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 2 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + #ifdef WAF_BUILD #include "libpbd-config.h" #endif +#include #include #include +#include "pbd/epa.h" #include "pbd/openuri.h" +#ifdef __APPLE__ +#include + extern bool cocoa_open_url (const char*); +#endif + +#ifdef PLATFORM_WINDOWS + #include + #include +#endif + bool PBD::open_uri (const char* uri) { -#ifdef HAVE_GTK_OPEN_URI - GError* err; - return gtk_open_uri (0, uri, GDK_CURRENT_TIME, &err); -#else -#ifdef __APPLE__ - extern bool cocoa_open_url (const char*); +#ifdef PLATFORM_WINDOWS + ShellExecute(NULL, "open", uri, NULL, NULL, SW_SHOWNORMAL); + return true; +#elif __APPLE__ return cocoa_open_url (uri); #else + EnvironmentalProtectionAgency* global_epa = EnvironmentalProtectionAgency::get_global_epa (); + boost::scoped_ptr current_epa; + + /* revert all environment settings back to whatever they were when ardour started + */ + + if (global_epa) { + current_epa.reset (new EnvironmentalProtectionAgency(true)); /* will restore settings when we leave scope */ + global_epa->restore (); + } + + std::string s(uri); + while (s.find("\\") != std::string::npos) + s.replace(s.find("\\"), 1, "\\\\"); + while (s.find("\"") != std::string::npos) + s.replace(s.find("\\"), 1, "\\\""); + std::string command = "xdg-open "; - command += uri; - Glib::spawn_command_line_async (command); + command += '"' + s + '"'; + command += " &"; + (void) system (command.c_str()); return true; #endif +} + +bool +PBD::open_uri (const std::string& uri) +{ + return open_uri (uri.c_str()); +} + +bool +PBD::open_folder (const std::string& d) +{ +#ifdef __APPLE__ + CURL *curl = curl_easy_init (); + bool rv = false; + if (curl) { + char * e = curl_easy_escape (curl, d.c_str(), d.size()); + std::string url = "file:///" + std::string(e); + rv = PBD::open_uri (url); + curl_free (e); + } + return rv; +#else + return PBD::open_uri (d); #endif }