Make clicks on io menu bundles always connect
authorJulien "_FrnchFrgg_" RIVAUD <frnchfrgg@free.fr>
Thu, 24 Aug 2017 09:54:15 +0000 (11:54 +0200)
committerJulien "_FrnchFrgg_" RIVAUD <frnchfrgg@free.fr>
Thu, 24 Aug 2017 13:41:40 +0000 (15:41 +0200)
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.

gtk2_ardour/mixer_strip.cc

index 0a457cc6ddd746f0b1ffc9194e85bcc3549eac60..5096f0f7eff4cf32fd0fa7e0744fd36025253eae 100644 (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