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);