+/*
+ 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 <boost/scoped_ptr.hpp>
#include <string>
#include <glibmm/spawn.h>
+#include "pbd/epa.h"
#include "pbd/openuri.h"
+#ifdef __APPLE__
+#include <curl/curl.h>
+ extern bool cocoa_open_url (const char*);
+#endif
+
+#ifdef PLATFORM_WINDOWS
+ #include <windows.h>
+ #include <shellapi.h>
+#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 ();
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 += " &";
- system (command.c_str());
+ (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
+}