summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorTodd Naugle <toddn@glw.com>2012-06-21 20:15:38 +0000
committerTodd Naugle <toddn@glw.com>2012-06-21 20:15:38 +0000
commit61f879bcee4c8ba471837ad7f6a28339205b85fa (patch)
treeccddb63b82785e3a8ba250ec1e5e79ba999ea668 /libs
parent8c87102688c06409850b6c7543a17932117a7a94 (diff)
Fixing issues with opening a browser when using the bundle. Use xdg-open instead of glib functions. Fix to epa to ensure that the enviroment is restored correctly. The current enviroment has to be cleared. Otherwise any variables that are set in the current enviroment, but do not have a setting in the restored version will be left set.
git-svn-id: svn://localhost/ardour2/branches/3.0@12812 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r--libs/pbd/epa.cc24
-rw-r--r--libs/pbd/openuri.cc19
-rw-r--r--libs/pbd/pbd/epa.h2
3 files changed, 38 insertions, 7 deletions
diff --git a/libs/pbd/epa.cc b/libs/pbd/epa.cc
index 3d3f7477d7..2d5ec29506 100644
--- a/libs/pbd/epa.cc
+++ b/libs/pbd/epa.cc
@@ -115,7 +115,29 @@ EnvironmentalProtectionAgency::save ()
void
EnvironmentalProtectionAgency::restore () const
{
+ clear ();
+
for (map<string,string>::const_iterator i = e.begin(); i != e.end(); ++i) {
setenv (i->first.c_str(), i->second.c_str(), 1);
}
-}
+}
+
+void
+EnvironmentalProtectionAgency::clear () const
+{
+ char** the_environ = environ;
+
+ for (size_t i = 0; the_environ[i]; ++i) {
+
+ string estring = the_environ[i];
+ string::size_type equal = estring.find_first_of ('=');
+
+ if (equal == string::npos) {
+ /* say what? an environ value without = ? */
+ continue;
+ }
+
+ string before = estring.substr (0, equal);
+ unsetenv(before.c_str());
+ }
+}
diff --git a/libs/pbd/openuri.cc b/libs/pbd/openuri.cc
index 403aff07c7..22e9bee715 100644
--- a/libs/pbd/openuri.cc
+++ b/libs/pbd/openuri.cc
@@ -10,20 +10,27 @@
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*);
return cocoa_open_url (uri);
#else
+ EnvironmentalProtectionAgency* global_epa = EnvironmentalProtectionAgency::get_global_epa ();
+ boost::scoped_ptr<EnvironmentalProtectionAgency> 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 command = "xdg-open ";
command += uri;
- Glib::spawn_command_line_async (command);
+ command += " &";
+ system (command.c_str());
return true;
#endif
-#endif
}
diff --git a/libs/pbd/pbd/epa.h b/libs/pbd/pbd/epa.h
index ffcd78504a..477d7f9678 100644
--- a/libs/pbd/pbd/epa.h
+++ b/libs/pbd/pbd/epa.h
@@ -38,6 +38,8 @@ class EnvironmentalProtectionAgency {
static void set_global_epa (EnvironmentalProtectionAgency* epa) { _global_epa = epa; }
private:
+ void clear () const;
+
bool _armed;
std::string _envname;
std::map<std::string,std::string> e;