X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Ffaderport8%2Factions.cc;h=d17059d92d5d0536b253eaab07cc431325a31af1;hb=b61146365f827fd04fe54a79e0c08926c9e2e9b5;hp=21ed2998c31af73a642492bd3396f1da5ad314db;hpb=ebc8e352bfb743b8239b1738208254ba904386f8;p=ardour.git diff --git a/libs/surfaces/faderport8/actions.cc b/libs/surfaces/faderport8/actions.cc index 21ed2998c3..d17059d92d 100644 --- a/libs/surfaces/faderport8/actions.cc +++ b/libs/surfaces/faderport8/actions.cc @@ -90,6 +90,7 @@ FaderPort8::setup_actions () BindFunction (BtnATouch, released, button_automation, ARDOUR::Touch); BindFunction (BtnARead, released, button_automation, ARDOUR::Play); BindFunction (BtnAWrite, released, button_automation, ARDOUR::Write); + BindFunction (BtnALatch, released, button_automation, ARDOUR::Latch); _ctrls.button (FP8Controls::BtnEncoder).pressed.connect_same_thread (button_connections, boost::bind (&FaderPort8::button_encoder, this)); _ctrls.button (FP8Controls::BtnParam).pressed.connect_same_thread (button_connections, boost::bind (&FaderPort8::button_parameter, this)); @@ -307,6 +308,9 @@ void FaderPort8::button_solo_clear () { bool soloing = session->soloing() || session->listening(); +#ifdef MIXBUS + soloing |= session->mixbus_soloed(); +#endif if (soloing) { StripableList all; session->get_stripables (all); @@ -314,12 +318,12 @@ FaderPort8::button_solo_clear () if ((*i)->is_master() || (*i)->is_auditioner() || (*i)->is_monitor()) { continue; } - boost::shared_ptr ac = (*i)->solo_control(); - if (ac && ac->get_value () > 0) { - _solo_state.push_back (boost::weak_ptr(ac)); + boost::shared_ptr sc = (*i)->solo_control(); + if (sc && sc->self_soloed ()) { + _solo_state.push_back (boost::weak_ptr(sc)); } } - AccessAction ("Main", "cancel-solo"); + cancel_all_solo (); // AccessAction ("Main", "cancel-solo"); } else { /* restore solo */ boost::shared_ptr cl (new ControlList); @@ -328,9 +332,7 @@ FaderPort8::button_solo_clear () if (!ac) { continue; } - if (ac->automation_state() == Touch && !ac->touching ()) { - ac->start_touch (ac->session().transport_frame()); - } + ac->start_touch (ac->session().transport_frame()); cl->push_back (ac); } if (!cl->empty()) { @@ -355,9 +357,7 @@ FaderPort8::button_mute_clear () continue; } cl->push_back (ac); - if (ac->automation_state() == Touch && !ac->touching ()) { - ac->start_touch (ac->session().transport_frame()); - } + ac->start_touch (ac->session().transport_frame()); } if (!cl->empty()) { session->set_controls (cl, 1.0, PBD::Controllable::NoGroup); @@ -397,9 +397,7 @@ FaderPort8::handle_encoder_pan (int steps) ac = s->pan_azimuth_control (); } if (ac) { - if (ac->automation_state() == Touch && !ac->touching ()) { - ac->start_touch (ac->session().transport_frame()); - } + ac->start_touch (ac->session().transport_frame()); if (steps == 0) { ac->set_value (ac->normal(), PBD::Controllable::UseGroup); } else { @@ -423,9 +421,7 @@ FaderPort8::handle_encoder_link (int steps) } double v = ac->internal_to_interface (ac->get_value()); - if (ac->automation_state() == Touch && !ac->touching ()) { - ac->start_touch (ac->session().transport_frame()); - } + ac->start_touch (ac->session().transport_frame()); if (steps == 0) { ac->set_value (ac->normal(), PBD::Controllable::UseGroup); @@ -532,9 +528,7 @@ FaderPort8::button_encoder () ac = session->master_out()->gain_control (); } if (ac) { - if (ac->automation_state() == Touch && !ac->touching ()) { - ac->start_touch (ac->session().transport_frame()); - } + ac->start_touch (ac->session().transport_frame()); ac->set_value (ac->normal(), PBD::Controllable::NoGroup); } } @@ -614,9 +608,7 @@ FaderPort8::encoder_navigate (bool neg, int steps) if (ac) { double v = ac->internal_to_interface (ac->get_value()); v = std::max (0.0, std::min (1.0, v + steps * (neg ? -.01 : .01))); - if (ac->automation_state() == Touch && !ac->touching ()) { - ac->start_touch (ac->session().transport_frame()); - } + ac->start_touch (ac->session().transport_frame()); ac->set_value (ac->interface_to_internal(v), PBD::Controllable::NoGroup); } }