diff --git a/libs/ardour/ardour/scene_change.h b/libs/ardour/ardour/scene_change.h index 4ad0ce5f39..51fe14b7f9 100644 --- a/libs/ardour/ardour/scene_change.h +++ b/libs/ardour/ardour/scene_change.h @@ -40,12 +40,17 @@ class SceneChange : public PBD::Stateful void set_color (uint32_t); bool color_out_of_bounds() const { return _color == out_of_bound_color; } static const uint32_t out_of_bound_color; + + bool active () const { return _active; } + void set_active (bool); PBD::Signal0 ColorChanged; + PBD::Signal0 ActiveChanged; protected: /* derived classes are responsible for serializing & deserializing this value */ uint32_t _color; + bool _active; }; diff --git a/libs/ardour/midi_scene_changer.cc b/libs/ardour/midi_scene_changer.cc index 4efcf95554..d3c6753087 100644 --- a/libs/ardour/midi_scene_changer.cc +++ b/libs/ardour/midi_scene_changer.cc @@ -95,6 +95,10 @@ MIDISceneChanger::gather (const Locations::LocationList& locations) void MIDISceneChanger::rt_deliver (MidiBuffer& mbuf, framepos_t when, boost::shared_ptr msc) { + if (!msc->active()) { + return; + } + uint8_t buf[4]; size_t cnt; @@ -120,6 +124,10 @@ MIDISceneChanger::rt_deliver (MidiBuffer& mbuf, framepos_t when, boost::shared_p void MIDISceneChanger::non_rt_deliver (boost::shared_ptr msc) { + if (!msc->active()) { + return; + } + uint8_t buf[4]; size_t cnt; boost::shared_ptr aport = boost::dynamic_pointer_cast(output_port); diff --git a/libs/ardour/scene_change.cc b/libs/ardour/scene_change.cc index 6560a7ca2f..322b37a195 100644 --- a/libs/ardour/scene_change.cc +++ b/libs/ardour/scene_change.cc @@ -41,6 +41,7 @@ SceneChange::factory (const XMLNode& node, int version) SceneChange::SceneChange () : _color (out_of_bound_color) + , _active (true) { } @@ -56,3 +57,12 @@ SceneChange::color() const { return _color; } + +void +SceneChange::set_active (bool yn) +{ + if (_active != yn) { + _active = yn; + ActiveChanged (); /* EMIT SIGNAL */ + } +}