From f4047b9a2656cbdc3e5cb3e943c6bdb421dccbfa Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Thu, 16 Jun 2016 19:41:39 -0700 Subject: [PATCH] OSC: take care of track order changes too. Deal with mixer topology changes one time. --- libs/surfaces/osc/osc.cc | 15 ++++++++++++++- libs/surfaces/osc/osc.h | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 948e73652d..19c8a33965 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -257,6 +257,9 @@ OSC::start () session->RouteAdded.connect(session_connections, MISSING_INVALIDATOR, boost::bind (&OSC::notify_routes_added, this, _1), this); // receive VCAs added session->vca_manager().VCAAdded.connect(session_connections, MISSING_INVALIDATOR, boost::bind (&OSC::notify_vca_added, this, _1), this); + // order changed + PresentationInfo::Change.connect (session_connections, MISSING_INVALIDATOR, boost::bind (&OSC::recalcbanks, this), this); + return 0; } @@ -1283,6 +1286,13 @@ OSC::notify_vca_added (ARDOUR::VCAList &) void OSC::recalcbanks () +{ + tick = false; + bank_dirty = true; +} + +void +OSC::_recalcbanks () { for (uint32_t it = 0; it < _surface.size(); ++it) { OSCSurface* sur = &_surface[it]; @@ -2389,8 +2399,11 @@ bool OSC::periodic (void) { if (!tick) { + usleep(100); // let flurry of signals subside if (bank_dirty) { - recalcbanks (); + _recalcbanks (); + bank_dirty = false; + tick = true; } } diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h index a2ebc80510..7cb256e725 100644 --- a/libs/surfaces/osc/osc.h +++ b/libs/surfaces/osc/osc.h @@ -495,6 +495,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI void route_name_changed (const PBD::PropertyChange&, boost::weak_ptr r, lo_address addr); void recalcbanks (); + void _recalcbanks (); void notify_routes_added (ARDOUR::RouteList &); void notify_vca_added (ARDOUR::VCAList &);