From 0f4530af0d3fbd0d37879c9c15814b63abd47aa9 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 1 Feb 2017 11:46:42 +0100 Subject: add new API to ControlProtocol to allow GUI to specify left-most mixer strip Subject To Change. Mileage May Vary. Offer Not Good In All Territories. --- libs/surfaces/control_protocol/control_protocol.cc | 22 ++++++++++++++++++---- .../control_protocol/control_protocol.h | 6 +++++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/libs/surfaces/control_protocol/control_protocol.cc b/libs/surfaces/control_protocol/control_protocol.cc index 8c2a121779..675294bbd9 100644 --- a/libs/surfaces/control_protocol/control_protocol.cc +++ b/libs/surfaces/control_protocol/control_protocol.cc @@ -57,7 +57,7 @@ PBD::Signal0 ControlProtocol::ClearStripableSelection; PBD::Signal1 ControlProtocol::StripableSelectionChanged; -Glib::Threads::Mutex ControlProtocol::first_selected_mutex; +Glib::Threads::Mutex ControlProtocol::special_stripable_mutex; boost::weak_ptr ControlProtocol::_first_selected_stripable; StripableNotificationList ControlProtocol::_last_selected; bool ControlProtocol::selection_connected = false; @@ -346,14 +346,28 @@ ControlProtocol::set_state (XMLNode const & node, int /* version */) boost::shared_ptr 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 +ControlProtocol::leftmost_mixer_stripable () +{ + Glib::Threads::Mutex::Lock lm (special_stripable_mutex); + return _first_selected_stripable.lock(); +} + +void +ControlProtocol::set_leftmost_mixer_stripable (boost::shared_ptr s) +{ + Glib::Threads::Mutex::Lock lm (special_stripable_mutex); + _first_selected_stripable = s; +} + void ControlProtocol::set_first_selected_stripable (boost::shared_ptr s) { - Glib::Threads::Mutex::Lock lm (first_selected_mutex); + Glib::Threads::Mutex::Lock lm (special_stripable_mutex); _first_selected_stripable = s; } @@ -365,7 +379,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) { diff --git a/libs/surfaces/control_protocol/control_protocol/control_protocol.h b/libs/surfaces/control_protocol/control_protocol/control_protocol.h index 2485ca84ac..987a8bcac4 100644 --- a/libs/surfaces/control_protocol/control_protocol/control_protocol.h +++ b/libs/surfaces/control_protocol/control_protocol/control_protocol.h @@ -95,6 +95,9 @@ class LIBCONTROLCP_API ControlProtocol : public PBD::Stateful, public PBD::Scope static boost::shared_ptr first_selected_stripable (); static void set_first_selected_stripable (boost::shared_ptr); + static boost::shared_ptr leftmost_mixer_stripable (); + static void set_leftmost_mixer_stripable (boost::shared_ptr); + /* the model here is as follows: we imagine most control surfaces being able to control @@ -156,7 +159,8 @@ class LIBCONTROLCP_API ControlProtocol : public PBD::Stateful, public PBD::Scope bool _active; - static Glib::Threads::Mutex first_selected_mutex; + static Glib::Threads::Mutex special_stripable_mutex; + static boost::weak_ptr _leftmost_mixer_stripable; static boost::weak_ptr _first_selected_stripable; static StripableNotificationList _last_selected; static void stripable_selection_changed (StripableNotificationListPtr); -- cgit v1.2.3