From a89b3f5687240b28340618c4f8962215fc1af41d Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 21 Apr 2016 11:08:47 -0400 Subject: clear all solo state should affect VCAs too --- libs/ardour/ardour/vca.h | 2 ++ libs/ardour/ardour/vca_manager.h | 1 + libs/ardour/session.cc | 2 ++ libs/ardour/session_rtevents.cc | 4 ++++ libs/ardour/vca.cc | 6 ++++++ libs/ardour/vca_manager.cc | 10 ++++++++++ 6 files changed, 25 insertions(+) (limited to 'libs') diff --git a/libs/ardour/ardour/vca.h b/libs/ardour/ardour/vca.h index 38fba07bc7..9af6436f6b 100644 --- a/libs/ardour/ardour/vca.h +++ b/libs/ardour/ardour/vca.h @@ -51,6 +51,8 @@ class LIBARDOUR_API VCA : public Stripable, public Soloable, public Muteable, pu XMLNode& get_state(); int set_state (XMLNode const&, int version); + void clear_all_solo_state (); + bool soloed () const; void push_solo_upstream (int32_t) {} void push_solo_isolate_upstream (int32_t) {} diff --git a/libs/ardour/ardour/vca_manager.h b/libs/ardour/ardour/vca_manager.h index c51336b558..d18044a8df 100644 --- a/libs/ardour/ardour/vca_manager.h +++ b/libs/ardour/ardour/vca_manager.h @@ -58,6 +58,7 @@ class VCAManager : public SessionHandleRef, public PBD::StatefulDestructible int set_state (XMLNode const&, int version); bool vcas_loaded() const { return _vcas_loaded; } + void clear_all_solo_state (); static std::string xml_node_name; diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index f706dd00ee..55cd1f9ae8 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -107,6 +107,7 @@ #include "ardour/user_bundle.h" #include "ardour/utils.h" #include "ardour/vca_manager.h" +#include "ardour/vca.h" #include "midi++/port.h" #include "midi++/mmc.h" @@ -324,6 +325,7 @@ Session::Session (AudioEngine &eng, pthread_cond_init (&_auto_connect_cond, 0); init_name_id_counter (1); // reset for new sessions, start at 1 + VCA::set_next_vca_number (1); // reset for new sessions, start at 1 pre_engine_init (fullpath); diff --git a/libs/ardour/session_rtevents.cc b/libs/ardour/session_rtevents.cc index 67249d48b9..3c905299b8 100644 --- a/libs/ardour/session_rtevents.cc +++ b/libs/ardour/session_rtevents.cc @@ -25,6 +25,7 @@ #include "ardour/route.h" #include "ardour/session.h" #include "ardour/track.h" +#include "ardour/vca_manager.h" #include "i18n.h" @@ -71,6 +72,9 @@ Session::rt_clear_all_solo_state (boost::shared_ptr rl, bool /* yn */ } (*i)->clear_all_solo_state(); } + + _vca_manager->clear_all_solo_state (); + set_dirty(); } diff --git a/libs/ardour/vca.cc b/libs/ardour/vca.cc index f746da8ff3..0e33dca6e2 100644 --- a/libs/ardour/vca.cc +++ b/libs/ardour/vca.cc @@ -146,3 +146,9 @@ VCA::set_state (XMLNode const& node, int version) return 0; } + +void +VCA::clear_all_solo_state () +{ + _solo_control->clear_all_solo_state (); +} diff --git a/libs/ardour/vca_manager.cc b/libs/ardour/vca_manager.cc index 6cc287554a..d7ad6ea851 100644 --- a/libs/ardour/vca_manager.cc +++ b/libs/ardour/vca_manager.cc @@ -177,3 +177,13 @@ VCAManager::set_state (XMLNode const& node, int version) return 0; } + +void +VCAManager::clear_all_solo_state () +{ + Mutex::Lock lm (lock); + + for (VCAList::const_iterator i = _vcas.begin(); i != _vcas.end(); ++i) { + (*i)->clear_all_solo_state (); + } +} -- cgit v1.2.3