summaryrefslogtreecommitdiff
path: root/libs/surfaces/generic_midi
diff options
context:
space:
mode:
authorTim Mayberry <mojofunk@gmail.com>2016-02-03 22:23:55 +1000
committerTim Mayberry <mojofunk@gmail.com>2016-02-03 22:30:41 +1000
commitdd05f1e257f8a715d23625bb725a727c57c4c0b6 (patch)
tree1b10f0e0be820072aee5b9180a389fe42221edbf /libs/surfaces/generic_midi
parent07f8c04e2e4113df84d64c6ea7464569431e9820 (diff)
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.
Diffstat (limited to 'libs/surfaces/generic_midi')
-rw-r--r--libs/surfaces/generic_midi/midicontrollable.cc8
-rw-r--r--libs/surfaces/generic_midi/midicontrollable.h2
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);