X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fopenuri.cc;h=0d744ae50d56bac379296865988eb01ac670cd5a;hb=6fa88273aa779be36dbe17f5d6c8566fcf22366b;hp=13d534e7606f9eb0102be399efdeb3d79a5ecd0c;hpb=3020b224fa2d6e1b6b8a576e8e8e211e0585f2a2;p=ardour.git diff --git a/libs/pbd/openuri.cc b/libs/pbd/openuri.cc index 13d534e760..0d744ae50d 100644 --- a/libs/pbd/openuri.cc +++ b/libs/pbd/openuri.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012 Paul Davis + 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 @@ -28,11 +28,23 @@ #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 __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 (); @@ -46,8 +58,14 @@ PBD::open_uri (const char* uri) 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; + command += '"' + s + '"'; command += " &"; (void) system (command.c_str()); @@ -56,7 +74,25 @@ PBD::open_uri (const char* uri) } bool -PBD::open_uri (const std::string& uri) +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 +}