OSC: add feedback for /monitor/mute,dim,mono
[ardour.git] / libs / surfaces / control_protocol / control_protocol.cc
index 8c2a1217790063cd4650d6debddda2a54149f41e..36131e0b9e704a6ab7fb8135dce87b2f1e4beb55 100644 (file)
@@ -57,8 +57,9 @@ PBD::Signal0<void>          ControlProtocol::ClearStripableSelection;
 
 PBD::Signal1<void,StripableNotificationListPtr> ControlProtocol::StripableSelectionChanged;
 
-Glib::Threads::Mutex ControlProtocol::first_selected_mutex;
+Glib::Threads::Mutex ControlProtocol::special_stripable_mutex;
 boost::weak_ptr<Stripable> ControlProtocol::_first_selected_stripable;
+boost::weak_ptr<Stripable> ControlProtocol::_leftmost_mixer_stripable;
 StripableNotificationList ControlProtocol::_last_selected;
 bool ControlProtocol::selection_connected = false;
 PBD::ScopedConnection ControlProtocol::selection_connection;
@@ -294,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
        }
 }
 
@@ -346,14 +348,28 @@ ControlProtocol::set_state (XMLNode const & node, int /* version */)
 boost::shared_ptr<Stripable>
 ControlProtocol::first_selected_stripable ()
 {
-       Glib::Threads::Mutex::Lock lm (first_selected_mutex);
+       Glib::Threads::Mutex::Lock lm (special_stripable_mutex);
        return _first_selected_stripable.lock();
 }
 
+boost::shared_ptr<Stripable>
+ControlProtocol::leftmost_mixer_stripable ()
+{
+       Glib::Threads::Mutex::Lock lm (special_stripable_mutex);
+       return _leftmost_mixer_stripable.lock();
+}
+
+void
+ControlProtocol::set_leftmost_mixer_stripable (boost::shared_ptr<Stripable> s)
+{
+       Glib::Threads::Mutex::Lock lm (special_stripable_mutex);
+       _leftmost_mixer_stripable = s;
+}
+
 void
 ControlProtocol::set_first_selected_stripable (boost::shared_ptr<Stripable> s)
 {
-       Glib::Threads::Mutex::Lock lm (first_selected_mutex);
+       Glib::Threads::Mutex::Lock lm (special_stripable_mutex);
        _first_selected_stripable = s;
 }
 
@@ -365,7 +381,7 @@ ControlProtocol::stripable_selection_changed (StripableNotificationListPtr sp)
        _last_selected = *sp;
 
        {
-               Glib::Threads::Mutex::Lock lm (first_selected_mutex);
+               Glib::Threads::Mutex::Lock lm (special_stripable_mutex);
 
                if (!_last_selected.empty()) {
                        if (!had_selection) {