add -P flag blocking port connections while loading session
authorTorben Hohn <torbenh@gmx.de>
Wed, 2 Jun 2010 16:21:02 +0000 (16:21 +0000)
committerTorben Hohn <torbenh@gmx.de>
Wed, 2 Jun 2010 16:21:02 +0000 (16:21 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@7213 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/ardour_ui.cc
gtk2_ardour/opts.cc
gtk2_ardour/opts.h
libs/ardour/ardour/port.h
libs/ardour/port.cc
libs/ardour/session_state.cc

index bf8fcb070991d3dd9060735950e30654d3f15243..0a8209fe22c0da90969df7d7742ce2da209ecf4b 100644 (file)
@@ -349,6 +349,8 @@ ARDOUR_UI::create_engine ()
 
        engine->Halted.connect_same_thread (forever_connections, boost::bind (&ARDOUR_UI::engine_halted, this, _1, false));
 
+        ARDOUR::Port::set_connecting_blocked (ARDOUR_COMMAND_LINE::no_connect_ports);
+
        post_engine ();
 
        return 0;
index 1b692f788d2dca15018e9314a5845677540610a1..e15df90fd5d5f065fd2c5f89644d0dc8197a54b9 100644 (file)
@@ -40,6 +40,7 @@ bool ARDOUR_COMMAND_LINE::use_vst = true;
 bool ARDOUR_COMMAND_LINE::new_session = false;
 char* ARDOUR_COMMAND_LINE::curvetest_file = 0;
 bool ARDOUR_COMMAND_LINE::try_hw_optimization = true;
+bool ARDOUR_COMMAND_LINE::no_connect_ports = false;
 string ARDOUR_COMMAND_LINE::keybindings_path = ""; /* empty means use builtin default */
 Glib::ustring ARDOUR_COMMAND_LINE::menus_file = "ardour.menus";
 bool ARDOUR_COMMAND_LINE::finder_invoked_ardour = false;
@@ -79,7 +80,7 @@ print_help (const char *execname)
 int
 ARDOUR_COMMAND_LINE::parse_opts (int argc, char *argv[])
 {
-       const char *optstring = "bc:C:dD:hk:E:m:N:nOp:ST:U:vV";
+       const char *optstring = "bc:C:dD:hk:E:m:N:nOp:PST:U:vV";
        const char *execname = strrchr (argv[0], '/');
 
        if (getenv ("ARDOUR_SAE")) {
@@ -109,6 +110,7 @@ ARDOUR_COMMAND_LINE::parse_opts (int argc, char *argv[])
                { "save", 1, 0, 'E' },
                { "uuid", 1, 0, 'U' },
                { "template", 1, 0, 'T' },
+               { "no-connect-ports", 0, 0, 'P' },
                { 0, 0, 0, 0 }
        };
 
@@ -177,6 +179,10 @@ ARDOUR_COMMAND_LINE::parse_opts (int argc, char *argv[])
                        try_hw_optimization = false;
                        break;
 
+               case 'P':
+                       no_connect_ports = true;
+                       break;
+
                case 'V':
 #ifdef VST_SUPPORT
                        use_vst = false;
index c0b6e96aac6d21ace62c43f9f22b6f8452e1da81..07ccb5bd1482fc62f75964f95932e7d4f85f9897 100644 (file)
@@ -34,6 +34,7 @@ extern bool   use_vst;
 extern bool   new_session;
 extern char*  curvetest_file;
 extern bool   try_hw_optimization;
+extern bool no_connect_ports;
 extern bool   use_gtk_theme;
 extern std::string keybindings_path;
 extern Glib::ustring menus_file;
index cc37bf082139dacb8c483a0f229b4c02a7250b4f..3a677d293f3cb85af1a633fb425c130e43f713e4 100644 (file)
@@ -56,6 +56,13 @@ public:
        static void set_buffer_size (nframes_t sz) {
                _buffer_size = sz;
        }
+       static void set_connecting_blocked( bool yn ) { 
+               _connecting_blocked = yn;
+       }
+       static bool connecting_blocked() { 
+               return _connecting_blocked;
+       }
+
 
        /** @return Port short name */
        std::string name () const {
@@ -130,6 +137,7 @@ protected:
 
        static nframes_t _port_offset;
        static nframes_t _buffer_size;
+       static bool      _connecting_blocked;
         
        static AudioEngine* _engine; ///< the AudioEngine
 
index 9cbdd14172d48519776b3efe2b2d6bc22c5abfe8..6ae0c5d92bdae344fa9fa31c17053a44d3c97a28 100644 (file)
@@ -36,6 +36,7 @@ using namespace ARDOUR;
 AudioEngine* Port::_engine = 0;
 nframes_t Port::_port_offset = 0;
 nframes_t Port::_buffer_size = 0;
+bool Port::_connecting_blocked = false;
 
 /** @param n Port short name */
 Port::Port (std::string const & n, DataType t, Flags f)
@@ -116,6 +117,9 @@ Port::connect (std::string const & other)
 
        int r = 0;
 
+       if (_connecting_blocked)
+               return r;
+
        if (sends_output ()) {
                r = jack_connect (_engine->jack (), this_shrt.c_str (), other_shrt.c_str ());
        } else {
index 2b3bd39b6accfe6f44a1fcfd538c40dd3655365e..19b8b58fbe8bdf12f78c4ff982e9fa7238018e78 100644 (file)
@@ -92,6 +92,7 @@
 #include "ardour/midi_track.h"
 #include "ardour/named_selection.h"
 #include "ardour/processor.h"
+#include "ardour/port.h"
 #include "ardour/region_factory.h"
 #include "ardour/route_group.h"
 #include "ardour/send.h"
@@ -365,6 +366,8 @@ Session::second_stage_init ()
 
        _state_of_the_state = Clean;
 
+       Port::set_connecting_blocked (false);
+
        DirtyChanged (); /* EMIT SIGNAL */
 
        if (state_was_pending) {