From d3738b087ef1698d45e140114feb8fca4d31e42f Mon Sep 17 00:00:00 2001 From: Ben Loftis Date: Wed, 17 May 2017 15:55:43 -0500 Subject: MCP: Fix issue with strip "select" buttons that stayed stuck on. * Depending on individual strips to watch the selection property is prone to failure. * Stripable_selection_changed() is called when a selection operation is completed. --- libs/surfaces/mackie/mackie_control_protocol.cc | 6 +++++- libs/surfaces/mackie/strip.cc | 11 +++++++---- libs/surfaces/mackie/strip.h | 2 ++ libs/surfaces/mackie/surface.cc | 9 +++++++++ libs/surfaces/mackie/surface.h | 2 ++ 5 files changed, 25 insertions(+), 5 deletions(-) (limited to 'libs') diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc index 0cee0e523b..3d011c1bb6 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.cc +++ b/libs/surfaces/mackie/mackie_control_protocol.cc @@ -2371,8 +2371,12 @@ MackieControlProtocol::is_mapped (boost::shared_ptr r) const void MackieControlProtocol::stripable_selection_changed () { - boost::shared_ptr s = first_selected_stripable (); + //this function is called after the stripable selection is "stable", so this is the place to check surface selection state + for (Surfaces::iterator si = surfaces.begin(); si != surfaces.end(); ++si) { + (*si)->update_strip_selection (); + } + boost::shared_ptr s = first_selected_stripable (); if (s) { check_fader_automation_state (); diff --git a/libs/surfaces/mackie/strip.cc b/libs/surfaces/mackie/strip.cc index 7197545857..3f1ab24da6 100644 --- a/libs/surfaces/mackie/strip.cc +++ b/libs/surfaces/mackie/strip.cc @@ -377,11 +377,13 @@ Strip::notify_property_changed (const PropertyChange& what_changed) if (what_changed.contains (ARDOUR::Properties::name)) { show_stripable_name (); } +} - if (what_changed.contains (ARDOUR::Properties::selected)) { - if (_stripable) { - _surface->write (_select->set_state (_stripable->is_selected())); - } +void +Strip::update_selection_state () +{ + if(_stripable) { + _surface->write (_select->set_state (_stripable->is_selected())); } } @@ -1729,6 +1731,7 @@ Strip::setup_eq_vpot (boost::shared_ptr r) case 2: eq_band = global_pos; pc = r->eq_gain_controllable (eq_band); + band_name = r->eq_band_name (eq_band); param = EQGain; break; } diff --git a/libs/surfaces/mackie/strip.h b/libs/surfaces/mackie/strip.h index a095f8ebe8..a1816f3844 100644 --- a/libs/surfaces/mackie/strip.h +++ b/libs/surfaces/mackie/strip.h @@ -86,6 +86,8 @@ public: void notify_metering_state_changed(); + void update_selection_state (); + void block_screen_display_for (uint32_t msecs); void block_vpot_mode_display_for (uint32_t msecs); diff --git a/libs/surfaces/mackie/surface.cc b/libs/surfaces/mackie/surface.cc index 35bff7e5b2..079d057d43 100644 --- a/libs/surfaces/mackie/surface.cc +++ b/libs/surfaces/mackie/surface.cc @@ -938,6 +938,15 @@ Surface::write (const MidiByteArray& data) } } +void +Surface::update_strip_selection () +{ + Strips::iterator s = strips.begin(); + for ( ; s != strips.end(); ++s) { + (*s)->update_selection_state(); + } +} + void Surface::map_stripables (const vector >& stripables) { diff --git a/libs/surfaces/mackie/surface.h b/libs/surfaces/mackie/surface.h index 3225e23ba0..1c1096fbc4 100644 --- a/libs/surfaces/mackie/surface.h +++ b/libs/surfaces/mackie/surface.h @@ -90,6 +90,8 @@ public: void map_stripables (const std::vector >&); + void update_strip_selection (); + const MidiByteArray& sysex_hdr() const; void periodic (ARDOUR::microseconds_t now_usecs); -- cgit v1.2.3