Make clicks on io menu bundles always connect

If a bundle was already connected, a click on the corresponding entry
disconnected it, essentially giving toggle semantics to the io menus.
This behavior has three problems:

 — When clicking on a not yet connected bundle, the new bundle replaces
   any already connected one. This is not consistent with a toggle mode.
 — It is a less discoverable and less easy way to disconnect a bundle
   than the already present "Disconnect" menu entry.
 — Bundles that match the I/O channels only partially (recently added to cater
   for e.g. MIDI+STEREO tracks connecting to Master) are never
   considered "connected" because the channels are not connected 1:1.
   Those will thus never toggle, making the behavior inconsistent.

Change the semantics to ensure a bundle is connected on click instead.
This commit is contained in:
Julien "_FrnchFrgg_" RIVAUD 2017-08-24 11:54:15 +02:00
parent 9c793759c8
commit dea8ee7f38

View file

@ -1078,13 +1078,7 @@ MixerStrip::bundle_input_chosen (boost::shared_ptr<ARDOUR::Bundle> c)
return;
}
ARDOUR::BundleList current = _route->input()->bundles_connected ();
if (std::find (current.begin(), current.end(), c) == current.end()) {
_route->input()->connect_ports_to_bundle (c, true, this);
} else {
_route->input()->disconnect_ports_from_bundle (c, this);
}
_route->input()->connect_ports_to_bundle (c, true, this);
}
void
@ -1094,13 +1088,7 @@ MixerStrip::bundle_output_chosen (boost::shared_ptr<ARDOUR::Bundle> c)
return;
}
ARDOUR::BundleList current = _route->output()->bundles_connected ();
if (std::find (current.begin(), current.end(), c) == current.end()) {
_route->output()->connect_ports_to_bundle (c, true, true, this);
} else {
_route->output()->disconnect_ports_from_bundle (c, this);
}
route->output()->connect_ports_to_bundle (c, true, true, this);
}
void