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/JackDbusDriver.cpp | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) (limited to 'src/JackDbusDriver.cpp') diff --git a/src/JackDbusDriver.cpp b/src/JackDbusDriver.cpp index 85dfae3..4d780a7 100644 --- a/src/JackDbusDriver.cpp +++ b/src/JackDbusDriver.cpp @@ -20,11 +20,11 @@ #include "patchage_config.h" #include "Driver.hpp" +#include "ILog.hpp" #include "PatchageEvent.hpp" #include "PortNames.hpp" #include "PortType.hpp" #include "SignalDirection.hpp" -#include "handle_event.hpp" #include "warnings.hpp" PATCHAGE_DISABLE_FMT_WARNINGS @@ -55,8 +55,9 @@ PATCHAGE_RESTORE_WARNINGS #define JACKDBUS_PORT_TYPE_AUDIO 0 #define JACKDBUS_PORT_TYPE_MIDI 1 -JackDriver::JackDriver(ILog& log) - : _log(log) +JackDriver::JackDriver(ILog& log, EventSink emit_event) + : Driver{std::move(emit_event)} + , _log(log) , _dbus_error() , _dbus_connection(nullptr) , _max_dsp_load(0.0f) @@ -210,7 +211,7 @@ JackDriver::dbus_message_hook(DBusConnection* /*connection*/, me->signal_attached.emit(); } - me->_events.emplace( + me->_emit_event( PortCreationEvent{PortID::jack(client_name, port_name), me->port_info(port_name, port_type, port_flags)}); @@ -245,7 +246,7 @@ JackDriver::dbus_message_hook(DBusConnection* /*connection*/, me->signal_attached.emit(); } - me->_events.emplace( + me->_emit_event( PortDestructionEvent{PortID::jack(client_name, port_name)}); return DBUS_HANDLER_RESULT_HANDLED; @@ -289,7 +290,7 @@ JackDriver::dbus_message_hook(DBusConnection* /*connection*/, me->signal_attached.emit(); } - me->_events.emplace( + me->_emit_event( ConnectionEvent{PortID::jack(client_name, port_name), PortID::jack(client2_name, port2_name)}); @@ -334,7 +335,7 @@ JackDriver::dbus_message_hook(DBusConnection* /*connection*/, me->signal_attached.emit(); } - me->_events.emplace( + me->_emit_event( DisconnectionEvent{PortID::jack(client_name, port_name), PortID::jack(client2_name, port2_name)}); @@ -980,13 +981,3 @@ JackDriver::info_msg(const std::string& msg) const { _log.info(std::string{"[JACK] "} + msg); } - -void -JackDriver::process_events(Patchage* app) -{ - while (!_events.empty()) { - PatchageEvent& ev = _events.front(); - handle_event(*app, ev); - _events.pop(); - } -} -- cgit v1.2.1