diff options
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/session_midi.cc | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/libs/ardour/session_midi.cc b/libs/ardour/session_midi.cc index a0c1b8c7d4..eb2dce2767 100644 --- a/libs/ardour/session_midi.cc +++ b/libs/ardour/session_midi.cc @@ -759,13 +759,15 @@ Session::rewire_selected_midi (boost::shared_ptr<MidiTrack> new_midi_target) AudioEngine::instance()->get_midi_selection_ports (msp); if (!msp.empty()) { + if (old_midi_target) { - for (PortManager::MidiSelectionPorts::const_iterator p = msp.begin(); p != msp.end(); ++p) { - AudioEngine::instance()->disconnect (*p); - } + old_midi_target->input()->disconnect (this); } for (PortManager::MidiSelectionPorts::const_iterator p = msp.begin(); p != msp.end(); ++p) { + /* 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); } } |