diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2012-04-22 02:15:24 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2012-04-22 02:15:24 +0000 |
commit | 82c867bf2a6f4de102707b812a87d68e3bd6e170 (patch) | |
tree | 157488dbc4def6614f2f01792a32a20af5ede167 /libs/ardour | |
parent | ca96b9afe85018fac3e5097f7b211a544d7689a9 (diff) |
MCP: a fistful of improvements. probably best to just try it and see what it broken. KNOWN: pressing vpots without a bank/channel shift will crash ardour
git-svn-id: svn://localhost/ardour2/branches/3.0@12053 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/control_protocol_manager.h | 3 | ||||
-rw-r--r-- | libs/ardour/control_protocol_manager.cc | 10 | ||||
-rw-r--r-- | libs/ardour/session.cc | 12 |
3 files changed, 24 insertions, 1 deletions
diff --git a/libs/ardour/ardour/control_protocol_manager.h b/libs/ardour/ardour/control_protocol_manager.h index ad5bb3166e..19abbaf6be 100644 --- a/libs/ardour/ardour/control_protocol_manager.h +++ b/libs/ardour/ardour/control_protocol_manager.h @@ -62,10 +62,11 @@ class ControlProtocolManager : public PBD::Stateful, public ARDOUR::SessionHandl void discover_control_protocols (); void foreach_known_protocol (boost::function<void(const ControlProtocolInfo*)>); void load_mandatory_protocols (); + void midi_connectivity_established (); ControlProtocol* instantiate (ControlProtocolInfo&); int teardown (ControlProtocolInfo&); - + std::list<ControlProtocolInfo*> control_protocol_info; static const std::string state_node_name; diff --git a/libs/ardour/control_protocol_manager.cc b/libs/ardour/control_protocol_manager.cc index 6a8dd77d55..876091fa7d 100644 --- a/libs/ardour/control_protocol_manager.cc +++ b/libs/ardour/control_protocol_manager.cc @@ -401,3 +401,13 @@ ControlProtocolManager::instance () return *_instance; } + +void +ControlProtocolManager::midi_connectivity_established () +{ + Glib::Mutex::Lock lm (protocols_lock); + + for (list<ControlProtocol*>::iterator p = control_protocols.begin(); p != control_protocols.end(); ++p) { + (*p)->midi_connectivity_established (); + } +} diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index a7fc6740c2..5744b55c65 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -537,11 +537,17 @@ Session::when_engine_running () BootMessage (_("Setup signal flow and plugins")); + /* this will cause the CPM to instantiate any protocols that are in use + * (or mandatory), which will pass it this Session, and then call + * set_state() on each instantiated protocol to match stored state. + */ + ControlProtocolManager::instance().set_session (this); /* This must be done after the ControlProtocolManager set_session above, as it will set states for ports which the ControlProtocolManager creates. */ + MIDI::Manager::instance()->set_port_states (Config->midi_port_states ()); /* And this must be done after the MIDI::Manager::set_port_states as @@ -550,6 +556,12 @@ Session::when_engine_running () hookup_io (); + /* Let control protocols know that we are now all connected, so they + * could start talking to surfaces if they want to. + */ + + ControlProtocolManager::instance().midi_connectivity_established (); + if (_is_new && !no_auto_connect()) { Glib::Mutex::Lock lm (AudioEngine::instance()->process_lock()); auto_connect_master_bus (); |