summaryrefslogtreecommitdiff
path: root/libs/ardour/session_midi.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2019-03-06 19:46:51 -0700
committerPaul Davis <paul@linuxaudiosystems.com>2019-03-07 12:01:27 -0700
commit8b212bfa1294aa0e751690de355b05d4eaa82759 (patch)
treec4c7c77ef02bb8b8a1ec85619c9444102afc05e6 /libs/ardour/session_midi.cc
parent66f73f40dbbd9246699b710b03e26b752f5fb8f4 (diff)
a more nuanced version of the "do-not-automatically-disconnect-selection-follows-input
Diffstat (limited to 'libs/ardour/session_midi.cc')
-rw-r--r--libs/ardour/session_midi.cc12
1 files changed, 12 insertions, 0 deletions
diff --git a/libs/ardour/session_midi.cc b/libs/ardour/session_midi.cc
index 4d1653b7f7..18ee55408c 100644
--- a/libs/ardour/session_midi.cc
+++ b/libs/ardour/session_midi.cc
@@ -756,6 +756,18 @@ Session::rewire_selected_midi (boost::shared_ptr<MidiTrack> new_midi_target)
}
for (vector<string>::const_iterator p = msp.begin(); p != msp.end(); ++p) {
+ PortManager::MidiPortInformation mpi (AudioEngine::instance()->midi_port_information (*p));
+
+ /* if a port is marked for control data, do not
+ * disconnect it from everything since it may also be
+ * used via a control surface or some other
+ * functionality.
+ */
+
+ if (!(mpi.properties & MidiPortControl)) {
+ /* disconnect the port from everything */
+ AudioEngine::instance()->disconnect (*p);
+ }
/* connect it to the new target */
new_midi_target->input()->connect (new_midi_target->input()->nth(0), (*p), this);
}