summaryrefslogtreecommitdiff
path: root/libs/ardour/session_midi.cc
diff options
context:
space:
mode:
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);
}