summaryrefslogtreecommitdiffstats
path: root/src/JackDbusDriver.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2020-11-28 22:23:54 +0100
committerDavid Robillard <d@drobilla.net>2020-11-28 22:49:10 +0100
commit924775a79c07a4f5798fcefddb523b189e473080 (patch)
tree6a201df93b109d10cb5c5cab018ee89448c00e00 /src/JackDbusDriver.cpp
parent5128bfab7ddb9504abf17375e910e5bc94af291e (diff)
downloadpatchage-924775a79c07a4f5798fcefddb523b189e473080.tar.gz
patchage-924775a79c07a4f5798fcefddb523b189e473080.tar.bz2
patchage-924775a79c07a4f5798fcefddb523b189e473080.zip
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.
Diffstat (limited to 'src/JackDbusDriver.cpp')
-rw-r--r--src/JackDbusDriver.cpp25
1 files changed, 8 insertions, 17 deletions
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();
- }
-}