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 &);