diff --git a/libs/ardour/vst3_plugin.cc b/libs/ardour/vst3_plugin.cc index 42e25047e5..e55b57037f 100644 --- a/libs/ardour/vst3_plugin.cc +++ b/libs/ardour/vst3_plugin.cc @@ -2689,15 +2689,9 @@ VST3PI::setContextInfoValue (FIDString id, int32 value) } else if (0 == strcmp (id, ContextInfo::kMultiSelect)) { _add_to_selection = value != 0; } else if (0 == strcmp (id, ContextInfo::kMute)) { - boost::shared_ptr ac = lookup_ac (_owner, id); - if (ac) { - ac->set_value (value != 0 ? 1 : 0, Controllable::NoGroup); - } + s->session().set_control (lookup_ac (_owner, id), value != 0 ? 1 : 0, Controllable::NoGroup); } else if (0 == strcmp (id, ContextInfo::kSolo)) { - boost::shared_ptr ac = lookup_ac (_owner, id); - if (ac) { - ac->set_value (value != 0 ? 1 : 0, Controllable::NoGroup); - } + s->session().set_control (lookup_ac (_owner, id), value != 0 ? 1 : 0, Controllable::NoGroup); } else { DEBUG_TRACE (DEBUG::VST3Callbacks, "VST3PI::setContextInfoValue: unsupported ID\n"); return kNotImplemented; diff --git a/libs/surfaces/control_protocol/control_protocol.cc b/libs/surfaces/control_protocol/control_protocol.cc index 58cc5bc755..292c2f3a51 100644 --- a/libs/surfaces/control_protocol/control_protocol.cc +++ b/libs/surfaces/control_protocol/control_protocol.cc @@ -287,8 +287,7 @@ ControlProtocol::route_set_soloed (uint32_t table_index, bool yn) boost::shared_ptr r = route_table[table_index]; if (r != 0) { - 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 + session->set_control (r->solo_control(), yn ? 1.0 : 0.0, Controllable::UseGroup); } } diff --git a/libs/surfaces/faderport8/fp8_strip.cc b/libs/surfaces/faderport8/fp8_strip.cc index 616e4f3fc0..bd3d137996 100644 --- a/libs/surfaces/faderport8/fp8_strip.cc +++ b/libs/surfaces/faderport8/fp8_strip.cc @@ -411,7 +411,9 @@ FP8Strip::set_solo (bool on) return; } _solo_ctrl->start_touch (_solo_ctrl->session().transport_sample()); - _solo_ctrl->set_value (on ? 1.0 : 0.0, group_mode ()); + PBD::Controllable::GroupControlDisposition gcd = group_mode (); + Session& s = const_cast (_solo_ctrl->session()); + s.set_control (_solo_ctrl, on ? 1.0 : 0.0, gcd); } void diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 849a53db82..eae5d2a2a5 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -4205,9 +4205,7 @@ OSC::route_solo (int ssid, int yn, lo_message msg) if ((sur->temp_mode == BusOnly) && (s != sur->temp_master)) { return float_message_with_id (X_("/strip/solo"), ssid, 0, sur->feedback[2], get_address (msg)); } - if (s->solo_control()) { - s->solo_control()->set_value (yn ? 1.0 : 0.0, sur->usegroup); - } + session->set_control (s->solo_control(), yn ? 1.0 : 0.0, sur->usegroup); } return float_message_with_id (X_("/strip/solo"), ssid, 0, sur->feedback[2], get_address (msg)); diff --git a/libs/surfaces/push2/track_mix.cc b/libs/surfaces/push2/track_mix.cc index 38231108c6..bf858b83fb 100644 --- a/libs/surfaces/push2/track_mix.cc +++ b/libs/surfaces/push2/track_mix.cc @@ -224,7 +224,7 @@ TrackMixLayout::button_lower (uint32_t n) break; case 1: if (stripable->solo_control()) { - stripable->solo_control()->set_value (!stripable->solo_control()->get_value(), PBD::Controllable::UseGroup); + session.set_control (stripable->solo_control(), !stripable->solo_control()->self_soloed(), PBD::Controllable::UseGroup); } break; case 2: