summaryrefslogtreecommitdiffstats
path: root/src/AlsaDriver.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2020-11-28 19:14:02 +0100
committerDavid Robillard <d@drobilla.net>2020-11-28 22:49:10 +0100
commit37a33e5549354b6142ce4aeacd6a7c627e772f48 (patch)
tree6b9df262b56f0c1fc420afeabf7f77b94eaa16b7 /src/AlsaDriver.cpp
parenta0b107e80d48238b662bbda2e6a64e633464e545 (diff)
downloadpatchage-37a33e5549354b6142ce4aeacd6a7c627e772f48.tar.gz
patchage-37a33e5549354b6142ce4aeacd6a7c627e772f48.tar.bz2
patchage-37a33e5549354b6142ce4aeacd6a7c627e772f48.zip
Clean up order of ALSA event handling
Diffstat (limited to 'src/AlsaDriver.cpp')
-rw-r--r--src/AlsaDriver.cpp45
1 files changed, 26 insertions, 19 deletions
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<std::mutex> 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;
}
}