Remove direct calls to set solo_control()

Changing solo-state needs to be done in rt-context to atomically
propagate solo/mute.

set_control() queues a rt-event, later Session::rt_set_control() calls
Session::update_route_solo_state() to propagate solo/mute.
This commit is contained in:
Robin Gareus 2017-02-17 03:58:51 +01:00
parent fef0739a10
commit 9d8829f5bf
4 changed files with 6 additions and 5 deletions

View File

@ -295,7 +295,8 @@ ControlProtocol::route_set_soloed (uint32_t table_index, bool yn)
boost::shared_ptr<Route> r = route_table[table_index];
if (r != 0) {
r->solo_control()->set_value (yn ? 1.0 : 0.0, Controllable::UseGroup);
r->solo_control()->set_value (yn ? 1.0 : 0.0, Controllable::UseGroup); // XXX does not propagate
//_session->set_control (r->solo_control(), yn ? 1.0 : 0.0, Controllable::UseGroup); // << correct way, needs a session ptr
}
}

View File

@ -140,7 +140,7 @@ FaderPort::solo ()
return;
}
_current_stripable->solo_control()->set_value (!_current_stripable->solo_control()->self_soloed(), PBD::Controllable::UseGroup);
session->set_control (_current_stripable->solo_control(), !_current_stripable->solo_control()->self_soloed(), PBD::Controllable::UseGroup);
}
void

View File

@ -2003,8 +2003,8 @@ OSC::sel_solo (uint32_t yn, lo_message msg)
}
if (s) {
if (s->solo_control()) {
s->solo_control()->set_value (yn ? 1.0 : 0.0, PBD::Controllable::NoGroup);
return sel_fail ("solo", (float) s->solo_control()->get_value(), get_address (msg));
session->set_control (s->solo_control(), yn ? 1.0 : 0.0, PBD::Controllable::NoGroup);
return sel_fail ("solo", yn, get_address (msg));
}
}
return sel_fail ("solo", 0, get_address (msg));

View File

@ -400,7 +400,7 @@ MixLayout::button_solo ()
if (s) {
boost::shared_ptr<AutomationControl> ac = s->solo_control();
if (ac) {
ac->set_value (!ac->get_value(), PBD::Controllable::UseGroup);
session.set_control (ac, !ac->get_value(), PBD::Controllable::UseGroup);
}
}
}