summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/plugin_pin_dialog.cc19
-rw-r--r--gtk2_ardour/plugin_pin_dialog.h1
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 ()); }
};