summaryrefslogtreecommitdiff
path: root/libs/surfaces
diff options
context:
space:
mode:
Diffstat (limited to 'libs/surfaces')
-rw-r--r--libs/surfaces/generic_midi/generic_midi_control_protocol.cc13
-rw-r--r--libs/surfaces/generic_midi/midicontrollable.cc4
2 files changed, 16 insertions, 1 deletions
diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
index 83c5d9008d..e81a45b47a 100644
--- a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
+++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
@@ -126,7 +126,18 @@ GenericMidiControlProtocol::start_learning (Controllable* c)
return false;
}
- MIDIControllable* mc = new MIDIControllable (*_port, *c);
+ MIDIControllable* mc = 0;
+
+ for (MIDIControllables::iterator i = controllables.begin(); i != controllables.end(); ++i) {
+ if ((*i)->get_controllable().id() == c->id()) {
+ mc = *i;
+ break;
+ }
+ }
+
+ if (!mc) {
+ mc = new MIDIControllable (*_port, *c);
+ }
{
Glib::Mutex::Lock lm (pending_lock);
diff --git a/libs/surfaces/generic_midi/midicontrollable.cc b/libs/surfaces/generic_midi/midicontrollable.cc
index 1b7177cf90..ef7a62619a 100644
--- a/libs/surfaces/generic_midi/midicontrollable.cc
+++ b/libs/surfaces/generic_midi/midicontrollable.cc
@@ -99,6 +99,8 @@ MIDIControllable::stop_learning ()
void
MIDIControllable::drop_external_control ()
{
+ cerr << "Dropping existing control using " << connections << " connections\n";
+
if (connections > 0) {
midi_sense_connection[0].disconnect ();
}
@@ -279,6 +281,8 @@ MIDIControllable::bind_midi (channel_t chn, eventType ev, MIDI::byte additional)
default:
break;
}
+
+ cerr << "MIDI bound with " << connections << endl;
}
void