From 924775a79c07a4f5798fcefddb523b189e473080 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 28 Nov 2020 22:23:54 +0100 Subject: Abstract out sending of events This removes the details of how events are handled from drivers, so the owner can set them up to do anything. For example, a driver could be run in the GUI thread and have its events simply dispatched immediately, but here everything is enqueued to the same queue which is drained later for simplicity. --- src/JackDriver.cpp | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) (limited to 'src/JackDriver.cpp') diff --git a/src/JackDriver.cpp b/src/JackDriver.cpp index cfcc541..9046c5d 100644 --- a/src/JackDriver.cpp +++ b/src/JackDriver.cpp @@ -24,7 +24,6 @@ #include "PortNames.hpp" #include "PortType.hpp" #include "SignalDirection.hpp" -#include "handle_event.hpp" #include "patchage_config.h" #ifdef HAVE_JACK_METADATA @@ -44,9 +43,11 @@ PATCHAGE_RESTORE_WARNINGS #include #include #include +#include -JackDriver::JackDriver(ILog& log) - : _log(log) +JackDriver::JackDriver(ILog& log, EventSink emit_event) + : Driver{std::move(emit_event)} + , _log(log) , _client(nullptr) , _last_pos{} , _buffer_size(0) @@ -345,9 +346,9 @@ JackDriver::jack_client_registration_cb(const char* name, assert(me->_client); if (registered) { - me->_events.emplace(ClientCreationEvent{ClientID::jack(name), {name}}); + me->_emit_event(ClientCreationEvent{ClientID::jack(name), {name}}); } else { - me->_events.emplace(ClientDestructionEvent{ClientID::jack(name)}); + me->_emit_event(ClientDestructionEvent{ClientID::jack(name)}); } } @@ -364,9 +365,9 @@ JackDriver::jack_port_registration_cb(jack_port_id_t port_id, const auto id = PortID::jack(name); if (registered) { - me->_events.emplace(PortCreationEvent{id, me->get_port_info(port)}); + me->_emit_event(PortCreationEvent{id, me->get_port_info(port)}); } else { - me->_events.emplace(PortDestructionEvent{id}); + me->_emit_event(PortDestructionEvent{id}); } } @@ -385,10 +386,10 @@ JackDriver::jack_port_connect_cb(jack_port_id_t src, const char* const dst_name = jack_port_name(dst_port); if (connect) { - me->_events.emplace( + me->_emit_event( ConnectionEvent{PortID::jack(src_name), PortID::jack(dst_name)}); } else { - me->_events.emplace( + me->_emit_event( DisconnectionEvent{PortID::jack(src_name), PortID::jack(dst_name)}); } } @@ -486,13 +487,3 @@ JackDriver::set_buffer_size(jack_nframes_t size) _buffer_size = size; return true; } - -void -JackDriver::process_events(Patchage* app) -{ - while (!_events.empty()) { - PatchageEvent& ev = _events.front(); - handle_event(*app, ev); - _events.pop(); - } -} -- cgit v1.2.1