X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=midi_mapper.cpp;fp=midi_mapper.cpp;h=ba996e8f4fab580f5eaf6b388b670b7ed8c7d3b5;hb=9a56523d8354d25804f23e6eee2624dde9aad1f0;hp=6395ff7381a25a008214188449e2f4c22ed53a6c;hpb=177725e4f259a75dcdbd4260ac57e5dd9c01fd57;p=nageru diff --git a/midi_mapper.cpp b/midi_mapper.cpp index 6395ff7..ba996e8 100644 --- a/midi_mapper.cpp +++ b/midi_mapper.cpp @@ -346,13 +346,27 @@ void MIDIMapper::handle_event(snd_seq_t *seq, snd_seq_event_t *event) case SND_SEQ_EVENT_PORT_EXIT: printf("MIDI port %d:%d went away.\n", event->data.addr.client, event->data.addr.port); break; + case SND_SEQ_EVENT_PORT_SUBSCRIBED: + if (event->data.connect.sender.client != 0 && // Ignore system senders. + event->data.connect.sender.client != snd_seq_client_id(seq) && + event->data.connect.dest.client == snd_seq_client_id(seq)) { + ++num_subscribed_ports; + update_highlights(); + } + break; + case SND_SEQ_EVENT_PORT_UNSUBSCRIBED: + if (event->data.connect.sender.client != 0 && // Ignore system senders. + event->data.connect.sender.client != snd_seq_client_id(seq) && + event->data.connect.dest.client == snd_seq_client_id(seq)) { + --num_subscribed_ports; + update_highlights(); + } + break; case SND_SEQ_EVENT_NOTEOFF: case SND_SEQ_EVENT_CLIENT_START: case SND_SEQ_EVENT_CLIENT_EXIT: case SND_SEQ_EVENT_CLIENT_CHANGE: case SND_SEQ_EVENT_PORT_CHANGE: - case SND_SEQ_EVENT_PORT_SUBSCRIBED: - case SND_SEQ_EVENT_PORT_UNSUBSCRIBED: break; default: printf("Ignoring MIDI event of unknown type %d.\n", event->type); @@ -467,6 +481,11 @@ void MIDIMapper::refresh_lights() void MIDIMapper::update_highlights() { + if (num_subscribed_ports.load() == 0) { + receiver->clear_all_highlights(); + return; + } + // Global controllers. bool highlight_locut = false; bool highlight_limiter_threshold = false;