diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc index 5c0b3e02c6..bef36974c7 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.cc +++ b/libs/surfaces/mackie/mackie_control_protocol.cc @@ -491,14 +491,20 @@ MackieControlProtocol::handle_strip_button (SurfacePort & port, Control & contro } else if (control.name() == "select") { Strip* strip = const_cast(dynamic_cast(&control.group())); if (strip) { + if ((uint32_t) strip->index() < route_table.size()) { boost::shared_ptr r = route_table[strip->index()]; - if (r->remote_control_id() == _current_selected_track) { - UnselectTrack (); /* EMIT SIGNAL */ - _current_selected_track = -1; + + if (_modifier_state == MODIFIER_SHIFT) { + r->gain_control()->set_value (0.0); } else { - SelectByRID (r->remote_control_id()); /* EMIT SIGNAL */ - _current_selected_track = r->remote_control_id();; + if (r->remote_control_id() == _current_selected_track) { + UnselectTrack (); /* EMIT SIGNAL */ + _current_selected_track = -1; + } else { + SelectByRID (r->remote_control_id()); /* EMIT SIGNAL */ + _current_selected_track = r->remote_control_id();; + } } } }