From 37a33e5549354b6142ce4aeacd6a7c627e772f48 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 28 Nov 2020 19:14:02 +0100 Subject: Clean up order of ALSA event handling --- src/AlsaDriver.cpp | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/AlsaDriver.cpp b/src/AlsaDriver.cpp index 7f1e409..0b32fe9 100644 --- a/src/AlsaDriver.cpp +++ b/src/AlsaDriver.cpp @@ -567,22 +567,11 @@ AlsaDriver::_refresh_main() std::lock_guard lock{_events_mutex}; switch (ev->type) { - case SND_SEQ_EVENT_PORT_SUBSCRIBED: - if (!ignore(ev->data.connect.sender) && - !ignore(ev->data.connect.dest)) { - _events.emplace( - ConnectionEvent{addr_to_id(ev->data.connect.sender, false), - addr_to_id(ev->data.connect.dest, true)}); - } - break; - case SND_SEQ_EVENT_PORT_UNSUBSCRIBED: - if (!ignore(ev->data.connect.sender) && - !ignore(ev->data.connect.dest)) { - _events.emplace(DisconnectionEvent{ - addr_to_id(ev->data.connect.sender, false), - addr_to_id(ev->data.connect.dest, true)}); - } + case SND_SEQ_EVENT_CLIENT_START: + case SND_SEQ_EVENT_CLIENT_EXIT: + case SND_SEQ_EVENT_CLIENT_CHANGE: break; + case SND_SEQ_EVENT_PORT_START: snd_seq_get_any_client_info(_seq, ev->data.addr.client, cinfo); snd_seq_get_any_port_info( @@ -594,6 +583,7 @@ AlsaDriver::_refresh_main() addr_to_id(ev->data.addr, (caps & SND_SEQ_PORT_CAP_READ))}); } break; + case SND_SEQ_EVENT_PORT_EXIT: if (!ignore(ev->data.addr, false)) { // Note: getting caps at this point does not work @@ -609,13 +599,30 @@ AlsaDriver::_refresh_main() _app->canvas()->find_port(addr_to_id(ev->data.addr, true))); } break; - case SND_SEQ_EVENT_CLIENT_CHANGE: - case SND_SEQ_EVENT_CLIENT_EXIT: - case SND_SEQ_EVENT_CLIENT_START: + case SND_SEQ_EVENT_PORT_CHANGE: + break; + + case SND_SEQ_EVENT_PORT_SUBSCRIBED: + if (!ignore(ev->data.connect.sender) && + !ignore(ev->data.connect.dest)) { + _events.emplace( + ConnectionEvent{addr_to_id(ev->data.connect.sender, false), + addr_to_id(ev->data.connect.dest, true)}); + } + break; + + case SND_SEQ_EVENT_PORT_UNSUBSCRIBED: + if (!ignore(ev->data.connect.sender) && + !ignore(ev->data.connect.dest)) { + _events.emplace(DisconnectionEvent{ + addr_to_id(ev->data.connect.sender, false), + addr_to_id(ev->data.connect.dest, true)}); + } + break; + case SND_SEQ_EVENT_RESET: default: - //_events.push(PatchageEvent(PatchageEvent::REFRESH)); break; } } -- cgit v1.2.1