From dd05f1e257f8a715d23625bb725a727c57c4c0b6 Mon Sep 17 00:00:00 2001 From: Tim Mayberry Date: Wed, 3 Feb 2016 22:23:55 +1000 Subject: [PATCH] Fix bug #5633, Don't drop all midi bindings when a track is removed Only drop the controllable that is being destroyed, not all of them. --- libs/surfaces/generic_midi/midicontrollable.cc | 8 +++++--- libs/surfaces/generic_midi/midicontrollable.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/libs/surfaces/generic_midi/midicontrollable.cc b/libs/surfaces/generic_midi/midicontrollable.cc index 3a1aea592f..1051503fc4 100644 --- a/libs/surfaces/generic_midi/midicontrollable.cc +++ b/libs/surfaces/generic_midi/midicontrollable.cc @@ -142,7 +142,7 @@ MIDIControllable::set_controllable (Controllable* c) if (controllable) { controllable->Destroyed.connect (controllable_death_connection, MISSING_INVALIDATOR, - boost::bind (&MIDIControllable::drop_controllable, this), + boost::bind (&MIDIControllable::drop_controllable, this, _1), MidiControlUI::instance()); } } @@ -264,9 +264,11 @@ MIDIControllable::lookup_controllable() } void -MIDIControllable::drop_controllable () +MIDIControllable::drop_controllable (Controllable* c) { - set_controllable (0); + if (c == controllable) { + set_controllable (0); + } } void diff --git a/libs/surfaces/generic_midi/midicontrollable.h b/libs/surfaces/generic_midi/midicontrollable.h index a19e3a1a28..8c14856742 100644 --- a/libs/surfaces/generic_midi/midicontrollable.h +++ b/libs/surfaces/generic_midi/midicontrollable.h @@ -142,7 +142,7 @@ class MIDIControllable : public PBD::Stateful std::string _what; bool _bank_relative; - void drop_controllable(); + void drop_controllable (PBD::Controllable*); void midi_receiver (MIDI::Parser &p, MIDI::byte *, size_t); void midi_sense_note (MIDI::Parser &, MIDI::EventTwoBytes *, bool is_on);