diff options
author | Robin Gareus <robin@gareus.org> | 2016-04-02 02:02:47 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-04-02 02:02:47 +0200 |
commit | 46ca35ce7ef4bd73af50466598bcc8431b01ef7a (patch) | |
tree | a2a8dae03862961c7691e89d73139b5927cac7b0 | |
parent | bd5da84928bcc2fa25ff248e78ee84d8fff1be70 (diff) |
prevent dup output connections across instances
-rw-r--r-- | gtk2_ardour/plugin_pin_dialog.cc | 19 | ||||
-rw-r--r-- | gtk2_ardour/plugin_pin_dialog.h | 1 |
2 files changed, 19 insertions, 1 deletions
diff --git a/gtk2_ardour/plugin_pin_dialog.cc b/gtk2_ardour/plugin_pin_dialog.cc index eb4d0482b1..48f09f12ff 100644 --- a/gtk2_ardour/plugin_pin_dialog.cc +++ b/gtk2_ardour/plugin_pin_dialog.cc @@ -49,6 +49,7 @@ PluginPinDialog::PluginPinDialog (boost::shared_ptr<ARDOUR::PluginInsert> pi) , _pi (pi) , _pin_box_size (4) , _position_valid (false) + , _ignore_updates (false) { assert (pi->owner ()); // Route @@ -153,6 +154,9 @@ PluginPinDialog::~PluginPinDialog() void PluginPinDialog::plugin_reconfigured () { + if (_ignore_updates) { + return; + } _n_plugins = _pi->get_count (); _pi->configured_io (_in, _out); _sinks = _pi->natural_input_streams (); @@ -581,7 +585,20 @@ PluginPinDialog::handle_output_action (const CtrlElem &s, const CtrlElem &o) out_map.unset (s->dt, s->id); } // disconnect other outputs - uint32_t idx = out_map.get_src (s->dt, o->id, &valid); + _ignore_updates = true; + for (uint32_t n = 0; n < _n_plugins; ++n) { + if (n == pc) { + continue; + } + ChanMapping n_out_map (_pi->output_map (n)); + idx = n_out_map.get_src (s->dt, o->id, &valid); + if (valid) { + n_out_map.unset (s->dt, idx); + _pi->set_output_map (n, n_out_map); + } + } + _ignore_updates = false; + idx = out_map.get_src (s->dt, o->id, &valid); if (valid) { out_map.unset (s->dt, idx); } diff --git a/gtk2_ardour/plugin_pin_dialog.h b/gtk2_ardour/plugin_pin_dialog.h index 71f0b32ef2..4f98dee759 100644 --- a/gtk2_ardour/plugin_pin_dialog.h +++ b/gtk2_ardour/plugin_pin_dialog.h @@ -119,6 +119,7 @@ private: double _pin_box_size; double _width, _height; bool _position_valid; + bool _ignore_updates; ARDOUR::Route* _route () { return static_cast<ARDOUR::Route*> (_pi->owner ()); } }; |