prevent Primary-click or Shift-click from deselecting when clicking on a track "backg...
[ardour.git] / gtk2_ardour / main.cc
index 0497bccb788f54da71688e814496247909d0b14d..cebef59f26c5995f7f18ccc2b945b819f68c0045 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
-    Copyright (C) 2001-2007 Paul Davis
+    Copyright (C) 2001-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
 
     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
@@ -21,6 +21,7 @@
 #include <signal.h>
 #include <cerrno>
 #include <fstream>
 #include <signal.h>
 #include <cerrno>
 #include <fstream>
+#include <vector>
 
 #include <sigc++/bind.h>
 #include <gtkmm/settings.h>
 
 #include <sigc++/bind.h>
 #include <gtkmm/settings.h>
@@ -74,9 +75,9 @@ void
 gui_jack_error ()
 {
        MessageDialog win (string_compose (_("%1 could not connect to JACK."), PROGRAM_NAME),
 gui_jack_error ()
 {
        MessageDialog win (string_compose (_("%1 could not connect to JACK."), PROGRAM_NAME),
-                    false,
-                    Gtk::MESSAGE_INFO,
-                    (Gtk::ButtonsType)(Gtk::BUTTONS_NONE));
+                          false,
+                          Gtk::MESSAGE_INFO,
+                          Gtk::BUTTONS_NONE);
 win.set_secondary_text(_("There are several possible reasons:\n\
 \n\
 1) JACK is not running.\n\
 win.set_secondary_text(_("There are several possible reasons:\n\
 \n\
 1) JACK is not running.\n\
@@ -100,6 +101,22 @@ Please consider the possibilities, and perhaps (re)start JACK."));
        win.run ();
 }
 
        win.run ();
 }
 
+static void export_search_path (const string& base_dir, const char* varname, const char* dir)
+{
+       string path;
+       const char * cstr = getenv (varname);
+
+       if (cstr) {
+               path = cstr;
+               path += ':';
+       } else {
+               path = "";
+       }
+       path += base_dir;
+       path += dir;
+
+       setenv (varname, path.c_str(), 1);
+}
 
 #ifdef __APPLE__
 
 
 #ifdef __APPLE__
 
@@ -115,7 +132,7 @@ fixup_bundle_environment (int, char* [])
                return;
        }
 
                return;
        }
 
-        EnvironmentalProtectionAgency::set_global_epa (new EnvironmentalProtectionAgency (true, "PREBUNDLE_ENV"));
+       EnvironmentalProtectionAgency::set_global_epa (new EnvironmentalProtectionAgency (true, "PREBUNDLE_ENV"));
 
        set_language_preference ();
 
 
        set_language_preference ();
 
@@ -124,137 +141,36 @@ fixup_bundle_environment (int, char* [])
 
        _NSGetExecutablePath (execpath, &pathsz);
 
 
        _NSGetExecutablePath (execpath, &pathsz);
 
-       std::string exec_path (execpath);
-       std::string dir_path = Glib::path_get_dirname (exec_path);
        std::string path;
        std::string path;
-       const char *cstr = getenv ("PATH");
+       std::string exec_dir = Glib::path_get_dirname (execpath);
+       std::string bundle_dir;
+       std::string userconfigdir = user_config_directory();
 
 
-       /* ensure that we find any bundled executables (e.g. JACK),
-          and find them before any instances of the same name
-          elsewhere in PATH
-       */
+       bundle_dir = Glib::path_get_dirname (exec_dir);
 
 
-       path = dir_path;
+       export_search_path (bundle_dir, "ARDOUR_DLL_PATH", "/lib");
 
 
-       /* JACK is often in /usr/local/bin and since Info.plist refuses to 
-          set PATH, we have to force this in order to discover a running
-          instance of JACK ...
+       /* inside an OS X .app bundle, there is no difference
+          between DATA and CONFIG locations, since OS X doesn't
+          attempt to do anything to expose the notion of
+          machine-independent shared data.
        */
        */
-       
-       path += ':';
-       path += "/usr/local/bin";
-
-       if (cstr) {
-               path += ':';
-               path += cstr;
-       }
-       setenv ("PATH", path.c_str(), 1);
-
-       path = dir_path;
-       path += "/../Resources";
-       path += dir_path;
-       path += "/../Resources/Surfaces";
-       path += dir_path;
-       path += "/../Resources/Panners";
-
-       setenv ("ARDOUR_MODULE_PATH", path.c_str(), 1);
-
-        path = user_config_directory().to_string();
-        path += ':';
-       path += dir_path;
-       path += "/../Resources/icons:";
-       path += dir_path;
-       path += "/../Resources/pixmaps:";
-       path += dir_path;
-       path += "/../Resources/share:";
-       path += dir_path;
-       path += "/../Resources";
-
-       setenv ("ARDOUR_PATH", path.c_str(), 1);
-       setenv ("ARDOUR_CONFIG_PATH", path.c_str(), 1);
-
-       path = dir_path;
-       path += "/../Resources";
-       setenv ("ARDOUR_INSTANT_XML_PATH", path.c_str(), 1);
-
-       cstr = getenv ("LADSPA_PATH");
-       if (cstr) {
-               path = cstr;
-               path += ':';
-       } else {
-               path = "";
-       }
-       path += dir_path;
-       path += "/../Plugins";
-
-       setenv ("LADSPA_PATH", path.c_str(), 1);
-
-       cstr = getenv ("VAMP_PATH");
-       if (cstr) {
-               path = cstr;
-               path += ':';
-       } else {
-               path = "";
-       }
-       path += dir_path;
-       path += "/../Frameworks";
 
 
-       setenv ("VAMP_PATH", path.c_str(), 1);
+       export_search_path (bundle_dir, "ARDOUR_DATA_PATH", "/Resources");
+       export_search_path (bundle_dir, "ARDOUR_CONFIG_PATH", "/Resources");
+       export_search_path (bundle_dir, "ARDOUR_INSTANT_XML_PATH", "/Resources");
+       export_search_path (bundle_dir, "LADSPA_PATH", "/Plugins");
+       export_search_path (bundle_dir, "VAMP_PATH", "/lib");
+       export_search_path (bundle_dir, "SUIL_MODULE_DIR", "/lib");
+       export_search_path (bundle_dir, "GTK_PATH", "/lib/clearlooks");
 
 
-       cstr = getenv ("ARDOUR_CONTROL_SURFACE_PATH");
-       if (cstr) {
-               path = cstr;
-               path += ':';
-       } else {
-               path = "";
-       }
-       path += dir_path;
-       path += "/../Surfaces";
+       /* unset GTK_RC_FILES so that we only load the RC files that we define
+        */
 
 
-       setenv ("ARDOUR_CONTROL_SURFACE_PATH", path.c_str(), 1);
-
-       cstr = getenv ("ARDOUR_PANNER_PATH");
-       if (cstr) {
-               path = cstr;
-               path += ':';
-       } else {
-               path = "";
-       }
-       path += dir_path;
-       path += "/lib/panners";
-       
-       setenv ("ARDOUR_PANNER_PATH", path.c_str(), 1);
-
-       cstr = getenv ("ARDOUR_SURFACES_PATH");
-       if (cstr) {
-               path = cstr;
-               path += ':';
-       } else {
-               path = "";
-       }
-       path += dir_path;
-       path += "/lib/surfaces";
-       
-       setenv ("ARDOUR_SURFACES_PATH", path.c_str(), 1);
-
-
-       path = dir_path;
-       path += "/../Frameworks/clearlooks";
-
-       setenv ("GTK_PATH", path.c_str(), 1);
-
-        /* unset GTK_RC_FILES so that we only load the RC files that we define
-         */
-
-        unsetenv ("GTK_RC_FILES");
+       unsetenv ("GTK_RC_FILES");
 
        if (!ARDOUR::translations_are_disabled ()) {
 
        if (!ARDOUR::translations_are_disabled ()) {
-
-               path = dir_path;
-               path += "/../Resources/locale";
-               
-               localedir = strdup (path.c_str());
-               setenv ("GTK_LOCALEDIR", localedir, 1);
+               export_search_path (bundle_dir, "GTK_LOCALEDIR", "/Resources/locale");
        }
 
        /* write a pango.rc file and tell pango to use it. we'd love
        }
 
        /* write a pango.rc file and tell pango to use it. we'd love
@@ -265,62 +181,28 @@ fixup_bundle_environment (int, char* [])
           actually exists ...
        */
 
           actually exists ...
        */
 
-       try {
-               sys::create_directories (user_config_directory ());
-       }
-       catch (const sys::filesystem_error& ex) {
-               error << _("Could not create user configuration directory") << endmsg;
-       }
-
-       sys::path pangopath = user_config_directory();
-       pangopath /= "pango.rc";
-       path = pangopath.to_string();
-
-       std::ofstream pangorc (path.c_str());
-       if (!pangorc) {
-               error << string_compose (_("cannot open pango.rc file %1") , path) << endmsg;
-               return;
+       if (g_mkdir_with_parents (userconfigdir.c_str(), 0755) < 0) {
+               error << string_compose (_("cannot create user ardour folder %1 (%2)"), userconfigdir, strerror (errno))
+                     << endmsg;
        } else {
        } else {
-               pangorc << "[Pango]\nModuleFiles=";
-
-               pangopath = dir_path;
-               pangopath /= "..";
-               pangopath /= "Resources";
-               pangopath /= "pango.modules";
-
-               pangorc << pangopath.to_string() << endl;
-
-               pangorc.close ();
-
-               setenv ("PANGO_RC_FILE", path.c_str(), 1);
-       }
-
-       // gettext charset aliases
-
-       setenv ("CHARSETALIASDIR", path.c_str(), 1);
-
-       // font config
-
-       path = dir_path;
-       path += "/../Resources/fonts.conf";
-
-       setenv ("FONTCONFIG_FILE", path.c_str(), 1);
-
-       // GDK Pixbuf loader module file
-
-       path = dir_path;
-       path += "/../Resources/gdk-pixbuf.loaders";
-
-       setenv ("GDK_PIXBUF_MODULE_FILE", path.c_str(), 1);
-
-       if (getenv ("ARDOUR_WITH_JACK")) {
-               // JACK driver dir
-
-               path = dir_path;
-               path += "/../Frameworks";
-
-               setenv ("JACK_DRIVER_DIR", path.c_str(), 1);
+               
+               path = Glib::build_filename (userconfigdir, "pango.rc");
+               std::ofstream pangorc (path.c_str());
+               if (!pangorc) {
+                       error << string_compose (_("cannot open pango.rc file %1") , path) << endmsg;
+               } else {
+                       pangorc << "[Pango]\nModuleFiles="
+                               << Glib::build_filename (bundle_dir, "Resources/pango.modules") 
+                               << endl;
+                       pangorc.close ();
+                       
+                       setenv ("PANGO_RC_FILE", path.c_str(), 1);
+               }
        }
        }
+       
+       setenv ("CHARSETALIASDIR", bundle_dir.c_str(), 1);
+       setenv ("FONTCONFIG_FILE", Glib::build_filename (bundle_dir, "Resources/fonts.conf").c_str(), 1);
+       setenv ("GDK_PIXBUF_MODULE_FILE", Glib::build_filename (bundle_dir, "Resources/gdk-pixbuf.loaders").c_str(), 1);
 }
 
 #else
 }
 
 #else
@@ -328,123 +210,61 @@ fixup_bundle_environment (int, char* [])
 void
 fixup_bundle_environment (int /*argc*/, char* argv[])
 {
 void
 fixup_bundle_environment (int /*argc*/, char* argv[])
 {
+       /* THIS IS FOR LINUX - its just about the only place where its
+        * acceptable to build paths directly using '/'.
+        */
+
        if (!getenv ("ARDOUR_BUNDLED")) {
                return;
        }
        if (!getenv ("ARDOUR_BUNDLED")) {
                return;
        }
-       
-        EnvironmentalProtectionAgency::set_global_epa (new EnvironmentalProtectionAgency (true, "PREBUNDLE_ENV"));
 
 
-       Glib::ustring exec_path = argv[0];
-       Glib::ustring dir_path = Glib::path_get_dirname (Glib::path_get_dirname (exec_path));
-       Glib::ustring path;
-       const char *cstr = getenv ("PATH");
-        Glib::ustring userconfigdir = user_config_directory().to_string();
+       EnvironmentalProtectionAgency::set_global_epa (new EnvironmentalProtectionAgency (true, "PREBUNDLE_ENV"));
 
 
-       /* ensure that we find any bundled executables (e.g. JACK),
-          and find them before any instances of the same name
-          elsewhere in PATH
+       std::string path;
+       std::string dir_path = Glib::path_get_dirname (Glib::path_get_dirname (argv[0]));
+       std::string userconfigdir = user_config_directory();
+
+       /* note that this function is POSIX/Linux specific, so using / as
+          a dir separator in this context is just fine.
        */
 
        */
 
-        /* note that this function is POSIX/Linux specific, so using / as 
-           a dir separator in this context is just fine.
-        */
+       export_search_path (dir_path, "ARDOUR_DLL_PATH", "/lib");
+       export_search_path (dir_path, "ARDOUR_CONFIG_PATH", "/etc");
+       export_search_path (dir_path, "ARDOUR_INSTANT_XML_PATH", "/share");
+       export_search_path (dir_path, "ARDOUR_DATA_PATH", "/share");
+       export_search_path (dir_path, "LADSPA_PATH", "/plugins");
+       export_search_path (dir_path, "VAMP_PATH", "/lib");
+       export_search_path (dir_path, "SUIL_MODULE_DIR", "/lib");
 
 
-       path = dir_path;
-       path += "/etc:";
-       path += dir_path;
-       path += "/lib/surfaces:";
-       path += dir_path;
-       path += "/lib/panners:";
-
-       setenv ("ARDOUR_MODULE_PATH", path.c_str(), 1);
-
-        path = userconfigdir;
-        path += ':';
-       path += dir_path;
-       path += "/etc/icons:";
-       path += dir_path;
-       path += "/etc/pixmaps:";
-       path += dir_path;
-       path += "/share:";
-       path += dir_path;
-       path += "/etc";
-
-       setenv ("ARDOUR_PATH", path.c_str(), 1);
-       setenv ("ARDOUR_CONFIG_PATH", path.c_str(), 1);
-
-       path = dir_path;
-       path += "/etc";
-       setenv ("ARDOUR_INSTANT_XML_PATH", path.c_str(), 1);
-
-       cstr = getenv ("LADSPA_PATH");
-       if (cstr) {
-               path = cstr;
-               path += ':';
-       } else {
-               path = "";
-       }
-       path += dir_path;
-       path += "/lib/plugins";
-       
-       setenv ("LADSPA_PATH", path.c_str(), 1);
+       export_search_path (dir_path, "GTK_PATH", "/lib/clearlooks");
 
 
-       cstr = getenv ("VAMP_PATH");
-       if (cstr) {
-               path = cstr;
-               path += ':';
-       } else {
-               path = "";
-       }
-       path += dir_path;
-       path += "/lib";
-       
-       setenv ("VAMP_PATH", path.c_str(), 1);
+       /* unset GTK_RC_FILES so that we only load the RC files that we define
+        */
 
 
-       cstr = getenv ("ARDOUR_CONTROL_SURFACE_PATH");
-       if (cstr) {
-               path = cstr;
-               path += ':';
-       } else {
-               path = "";
-       }
-       path += dir_path;
-       path += "/lib/surfaces";
-       
-       setenv ("ARDOUR_CONTROL_SURFACE_PATH", path.c_str(), 1);
+       unsetenv ("GTK_RC_FILES");
 
 
-       cstr = getenv ("ARDOUR_PANNER_PATH");
-       if (cstr) {
-               path = cstr;
-               path += ':';
-       } else {
-               path = "";
+       if (!ARDOUR::translations_are_disabled ()) {
+               export_search_path (dir_path, "GTK_LOCALEDIR", "/share/locale");
        }
        }
-       path += dir_path;
-       path += "/lib/panners";
-       
-       setenv ("ARDOUR_PANNER_PATH", path.c_str(), 1);
-
-       path = dir_path;
-       path += "/lib/clearlooks";
-
-       setenv ("GTK_PATH", path.c_str(), 1);
 
 
-        /* unset GTK_RC_FILES so that we only load the RC files that we define
-         */
-
-        unsetenv ("GTK_RC_FILES");
+       /* Tell fontconfig where to find fonts.conf. Use the system version
+          if it exists, otherwise use the stuff we included in the bundle
+       */
 
 
-       if (!ARDOUR::translations_are_disabled ()) {
-                path = dir_path;
-                path += "/share/locale";
-                
-                localedir = strdup (path.c_str());
-                setenv ("GTK_LOCALEDIR", localedir, 1);
-        }
+       if (Glib::file_test ("/etc/fonts/fonts.conf", Glib::FILE_TEST_EXISTS)) {
+               setenv ("FONTCONFIG_FILE", "/etc/fonts/fonts.conf", 1);
+               setenv ("FONTCONFIG_PATH", "/etc/fonts", 1);
+       } else {
+               /* use the one included in the bundle */
+               
+               path = Glib::build_filename (dir_path, "etc/fonts/fonts.conf");
+               setenv ("FONTCONFIG_FILE", path.c_str(), 1);
+               export_search_path (dir_path, "FONTCONFIG_PATH", "/etc/fonts");
+       }
 
        /* write a pango.rc file and tell pango to use it. we'd love
           to put this into the Ardour.app bundle and leave it there,
 
        /* write a pango.rc file and tell pango to use it. we'd love
           to put this into the Ardour.app bundle and leave it there,
-          but the user may not have write permission. so ... 
+          but the user may not have write permission. so ...
 
           we also have to make sure that the user ardour directory
           actually exists ...
 
           we also have to make sure that the user ardour directory
           actually exists ...
@@ -454,31 +274,32 @@ fixup_bundle_environment (int /*argc*/, char* argv[])
                error << string_compose (_("cannot create user ardour folder %1 (%2)"), userconfigdir, strerror (errno))
                      << endmsg;
        } else {
                error << string_compose (_("cannot create user ardour folder %1 (%2)"), userconfigdir, strerror (errno))
                      << endmsg;
        } else {
-
-                Glib::ustring mpath;
-
+               
                path = Glib::build_filename (userconfigdir, "pango.rc");
                path = Glib::build_filename (userconfigdir, "pango.rc");
-
                std::ofstream pangorc (path.c_str());
                if (!pangorc) {
                        error << string_compose (_("cannot open pango.rc file %1") , path) << endmsg;
                std::ofstream pangorc (path.c_str());
                if (!pangorc) {
                        error << string_compose (_("cannot open pango.rc file %1") , path) << endmsg;
-                } else {
-                        mpath = Glib::build_filename (userconfigdir, "pango.modules");
-                        
-                       pangorc << "[Pango]\nModuleFiles=";
-                       pangorc << mpath << endl;
+               } else {
+                       pangorc << "[Pango]\nModuleFiles="
+                               << Glib::build_filename (userconfigdir, "pango.modules")
+                               << endl;
                        pangorc.close ();
                        pangorc.close ();
-                }
-
-                setenv ("PANGO_RC_FILE", path.c_str(), 1);
+               }
+               
+               setenv ("PANGO_RC_FILE", path.c_str(), 1);
+               
+               /* similar for GDK pixbuf loaders, but there's no RC file required
+                  to specify where it lives.
+               */
+               
+               setenv ("GDK_PIXBUF_MODULE_FILE", Glib::build_filename (userconfigdir, "gdk-pixbuf.loaders").c_str(), 1);
+       }
 
 
-                /* similar for GDK pixbuf loaders, but there's no RC file required
-                   to specify where it lives.
-                */
+        /* this doesn't do much but setting it should prevent various parts of the GTK/GNU stack
+           from looking outside the bundle to find the charset.alias file.
+        */
+        setenv ("CHARSETALIASDIR", dir_path.c_str(), 1);
 
 
-                mpath = Glib::build_filename (userconfigdir, "gdk-pixbuf.loaders");
-                setenv ("GDK_PIXBUF_MODULE_FILE", mpath.c_str(), 1);
-       }
 }
 
 #endif
 }
 
 #endif
@@ -488,7 +309,7 @@ tell_about_jack_death (void* /* ignored */)
 {
        if (AudioEngine::instance()->processed_frames() == 0) {
                /* died during startup */
 {
        if (AudioEngine::instance()->processed_frames() == 0) {
                /* died during startup */
-               MessageDialog msg (_("JACK exited"), false, Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK);
+               MessageDialog msg (_("JACK exited"), false);
                msg.set_position (Gtk::WIN_POS_CENTER);
                msg.set_secondary_text (string_compose (_(
 "JACK exited unexpectedly, and without notifying %1.\n\
                msg.set_position (Gtk::WIN_POS_CENTER);
                msg.set_secondary_text (string_compose (_(
 "JACK exited unexpectedly, and without notifying %1.\n\
@@ -496,15 +317,15 @@ tell_about_jack_death (void* /* ignored */)
 This could be due to misconfiguration or to an error inside JACK.\n\
 \n\
 Click OK to exit %1."), PROGRAM_NAME));
 This could be due to misconfiguration or to an error inside JACK.\n\
 \n\
 Click OK to exit %1."), PROGRAM_NAME));
-    
+
                msg.run ();
                _exit (0);
                msg.run ();
                _exit (0);
-               
+
        } else {
 
                /* engine has already run, so this is a mid-session JACK death */
        } else {
 
                /* engine has already run, so this is a mid-session JACK death */
-               
-               MessageDialog* msg = manage (new MessageDialog (_("JACK exited"), false, Gtk::MESSAGE_INFO, Gtk::BUTTONS_NONE));
+
+               MessageDialog* msg = manage (new MessageDialog (_("JACK exited"), false));
                msg->set_secondary_text (string_compose (_(
 "JACK exited unexpectedly, and without notifying %1.\n\
 \n\
                msg->set_secondary_text (string_compose (_(
 "JACK exited unexpectedly, and without notifying %1.\n\
 \n\
@@ -519,11 +340,11 @@ session at this time, because we would lose your connection information.\n"), PR
 static void
 sigpipe_handler (int /*signal*/)
 {
 static void
 sigpipe_handler (int /*signal*/)
 {
-        /* XXX fix this so that we do this again after a reconnect to JACK
-         */
+       /* XXX fix this so that we do this again after a reconnect to JACK
+        */
+
+       static bool done_the_jack_thing = false;
 
 
-        static bool done_the_jack_thing = false;
-       
        if (!done_the_jack_thing) {
                AudioEngine::instance()->died ();
                g_idle_add (tell_about_jack_death, 0);
        if (!done_the_jack_thing) {
                AudioEngine::instance()->died ();
                g_idle_add (tell_about_jack_death, 0);
@@ -531,13 +352,9 @@ sigpipe_handler (int /*signal*/)
        }
 }
 
        }
 }
 
-#ifdef HAVE_LV2
-void close_external_ui_windows();
-#endif
+#ifdef WINDOWS_VST_SUPPORT
 
 
-#ifdef VST_SUPPORT
-
-extern int gui_init (int* argc, char** argv[]);
+extern int windows_vst_gui_init (int* argc, char** argv[]);
 
 /* this is called from the entry point of a wine-compiled
    executable that is linked against gtk2_ardour built
 
 /* this is called from the entry point of a wine-compiled
    executable that is linked against gtk2_ardour built
@@ -553,15 +370,15 @@ int main (int argc, char *argv[])
 
        if (!Glib::thread_supported()) {
                Glib::thread_init();
 
        if (!Glib::thread_supported()) {
                Glib::thread_init();
-        }
+       }
 
        gtk_set_locale ();
 
 
        gtk_set_locale ();
 
-#ifdef VST_SUPPORT
+#ifdef WINDOWS_VST_SUPPORT
        /* this does some magic that is needed to make GTK and Wine's own
           X11 client interact properly.
        */
        /* this does some magic that is needed to make GTK and Wine's own
           X11 client interact properly.
        */
-       gui_init (&argc, &argv);
+       windows_vst_gui_init (&argc, &argv);
 #endif
 
        (void) bindtextdomain (PACKAGE, localedir);
 #endif
 
        (void) bindtextdomain (PACKAGE, localedir);
@@ -582,9 +399,9 @@ int main (int argc, char *argv[])
        text_receiver.listen_to (warning);
 
 #ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
        text_receiver.listen_to (warning);
 
 #ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
-        if (getenv ("BOOST_DEBUG")) {
-                boost_debug_shared_ptr_show_live_debugging (true);
-        }
+       if (getenv ("BOOST_DEBUG")) {
+               boost_debug_shared_ptr_show_live_debugging (true);
+       }
 #endif
 
        if (parse_opts (argc, argv)) {
 #endif
 
        if (parse_opts (argc, argv)) {
@@ -610,8 +427,8 @@ int main (int argc, char *argv[])
        }
 
        if (no_splash) {
        }
 
        if (no_splash) {
-               cerr << _("Copyright (C) 1999-2011 Paul Davis") << endl
-                    << _("Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel Baker") << endl
+               cerr << _("Copyright (C) 1999-2012 Paul Davis") << endl
+                    << _("Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel Baker, Robin Gareus") << endl
                     << endl
                     << string_compose (_("%1 comes with ABSOLUTELY NO WARRANTY"), PROGRAM_NAME) << endl
                     << _("not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.") << endl
                     << endl
                     << string_compose (_("%1 comes with ABSOLUTELY NO WARRANTY"), PROGRAM_NAME) << endl
                     << _("not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.") << endl
@@ -636,18 +453,15 @@ int main (int argc, char *argv[])
        }
 
        ui->run (text_receiver);
        }
 
        ui->run (text_receiver);
-        Gtkmm2ext::Application::instance()->cleanup();
+       Gtkmm2ext::Application::instance()->cleanup();
        ui = 0;
 
        ARDOUR::cleanup ();
        pthread_cancel_all ();
 
        ui = 0;
 
        ARDOUR::cleanup ();
        pthread_cancel_all ();
 
-#ifdef HAVE_LV2
-       close_external_ui_windows();
-#endif
        return 0;
 }
        return 0;
 }
-#ifdef VST_SUPPORT
+#ifdef WINDOWS_VST_SUPPORT
 } // end of extern C block
 #endif
 
 } // end of extern C block
 #endif