mirror of
https://github.com/neovim/neovim.git
synced 2025-09-29 14:38:32 +00:00
event: Remove EventType enum and pass a callback to event_push
This approach is more flexible because we don't need to support a fixed set of "event types", any module can push events to be handled in main loop by simply passing a callback to the Event structure.
This commit is contained in:
@@ -170,19 +170,7 @@ static size_t process_from(klist_t(Event) *queue)
|
||||
Event event;
|
||||
|
||||
while (kl_shift(Event, queue, &event) == 0) {
|
||||
switch (event.type) {
|
||||
case kEventSignal:
|
||||
signal_handle(event);
|
||||
break;
|
||||
case kEventRStreamData:
|
||||
rstream_read_event(event);
|
||||
break;
|
||||
case kEventJobExit:
|
||||
job_exit_event(event);
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
event.handler(event);
|
||||
count++;
|
||||
}
|
||||
|
||||
|
@@ -7,16 +7,12 @@
|
||||
#include "nvim/os/rstream_defs.h"
|
||||
|
||||
typedef void * EventSource;
|
||||
typedef struct event Event;
|
||||
typedef void (*event_handler)(Event event);
|
||||
|
||||
typedef enum {
|
||||
kEventSignal,
|
||||
kEventRStreamData,
|
||||
kEventJobExit
|
||||
} EventType;
|
||||
|
||||
typedef struct {
|
||||
struct event {
|
||||
EventSource source;
|
||||
EventType type;
|
||||
event_handler handler;
|
||||
union {
|
||||
int signum;
|
||||
struct {
|
||||
@@ -25,6 +21,6 @@ typedef struct {
|
||||
} rstream;
|
||||
Job *job;
|
||||
} data;
|
||||
} Event;
|
||||
};
|
||||
|
||||
#endif // NVIM_OS_EVENT_DEFS_H
|
||||
|
@@ -489,7 +489,7 @@ static void emit_exit_event(Job *job)
|
||||
{
|
||||
Event event = {
|
||||
.source = job_event_source(job),
|
||||
.type = kEventJobExit,
|
||||
.handler = job_exit_event,
|
||||
.data.job = job
|
||||
};
|
||||
event_push(event);
|
||||
|
@@ -430,7 +430,7 @@ static void emit_read_event(RStream *rstream, bool eof)
|
||||
{
|
||||
Event event = {
|
||||
.source = rstream_event_source(rstream),
|
||||
.type = kEventRStreamData,
|
||||
.handler = rstream_read_event,
|
||||
.data.rstream = {
|
||||
.ptr = rstream,
|
||||
.eof = eof
|
||||
|
@@ -164,7 +164,7 @@ static void signal_cb(uv_signal_t *handle, int signum)
|
||||
|
||||
Event event = {
|
||||
.source = signal_event_source(),
|
||||
.type = kEventSignal,
|
||||
.handler = signal_handle,
|
||||
.data = {
|
||||
.signum = signum
|
||||
}
|
||||
|
Reference in New Issue
Block a user