fix issues with route group assignment to control master

This commit is contained in:
Paul Davis 2016-05-19 13:10:28 -04:00
parent 637379d7a2
commit b5869ac0a4
2 changed files with 27 additions and 4 deletions

View File

@ -145,6 +145,7 @@ class LIBARDOUR_API RouteGroup : public SessionObject
void assign_master (boost::shared_ptr<VCA>); void assign_master (boost::shared_ptr<VCA>);
void unassign_master (boost::shared_ptr<VCA>); void unassign_master (boost::shared_ptr<VCA>);
bool slaved () const;
private: private:
boost::shared_ptr<RouteList> routes; boost::shared_ptr<RouteList> routes;

View File

@ -562,6 +562,10 @@ RouteGroup::push_to_groups ()
void void
RouteGroup::assign_master (boost::shared_ptr<VCA> master) RouteGroup::assign_master (boost::shared_ptr<VCA> master)
{ {
if (!routes || routes->empty()) {
return;
}
boost::shared_ptr<Route> front = routes->front (); boost::shared_ptr<Route> front = routes->front ();
if (!front) { if (!front) {
@ -572,16 +576,20 @@ RouteGroup::assign_master (boost::shared_ptr<VCA> master)
return; return;
} }
if (!front->slaved()) { bool cancel_master_controls = false;
if (!front->slaved()) {
pre_master_gain = is_gain (); pre_master_gain = is_gain ();
pre_master_solo = is_solo (); pre_master_solo = is_solo ();
pre_master_mute = is_mute (); pre_master_mute = is_mute ();
cancel_master_controls = true;
}
for (RouteList::iterator r = routes->begin(); r != routes->end(); ++r) { for (RouteList::iterator r = routes->begin(); r != routes->end(); ++r) {
(*r)->assign (master); (*r)->assign (master);
} }
if (cancel_master_controls) {
set_gain (false); set_gain (false);
set_solo (false); set_solo (false);
set_mute (false); set_mute (false);
@ -591,6 +599,10 @@ RouteGroup::assign_master (boost::shared_ptr<VCA> master)
void void
RouteGroup::unassign_master (boost::shared_ptr<VCA> master) RouteGroup::unassign_master (boost::shared_ptr<VCA> master)
{ {
if (!routes || routes->empty()) {
return;
}
boost::shared_ptr<Route> front = routes->front (); boost::shared_ptr<Route> front = routes->front ();
if (!front) { if (!front) {
@ -611,3 +623,13 @@ RouteGroup::unassign_master (boost::shared_ptr<VCA> master)
set_mute (pre_master_mute); set_mute (pre_master_mute);
} }
} }
bool
RouteGroup::slaved () const
{
if (!routes || routes->empty()) {
return false;
}
return routes->front()->slaved ();
}