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;
|
Event event;
|
||||||
|
|
||||||
while (kl_shift(Event, queue, &event) == 0) {
|
while (kl_shift(Event, queue, &event) == 0) {
|
||||||
switch (event.type) {
|
event.handler(event);
|
||||||
case kEventSignal:
|
|
||||||
signal_handle(event);
|
|
||||||
break;
|
|
||||||
case kEventRStreamData:
|
|
||||||
rstream_read_event(event);
|
|
||||||
break;
|
|
||||||
case kEventJobExit:
|
|
||||||
job_exit_event(event);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -7,16 +7,12 @@
|
|||||||
#include "nvim/os/rstream_defs.h"
|
#include "nvim/os/rstream_defs.h"
|
||||||
|
|
||||||
typedef void * EventSource;
|
typedef void * EventSource;
|
||||||
|
typedef struct event Event;
|
||||||
|
typedef void (*event_handler)(Event event);
|
||||||
|
|
||||||
typedef enum {
|
struct event {
|
||||||
kEventSignal,
|
|
||||||
kEventRStreamData,
|
|
||||||
kEventJobExit
|
|
||||||
} EventType;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
EventSource source;
|
EventSource source;
|
||||||
EventType type;
|
event_handler handler;
|
||||||
union {
|
union {
|
||||||
int signum;
|
int signum;
|
||||||
struct {
|
struct {
|
||||||
@@ -25,6 +21,6 @@ typedef struct {
|
|||||||
} rstream;
|
} rstream;
|
||||||
Job *job;
|
Job *job;
|
||||||
} data;
|
} data;
|
||||||
} Event;
|
};
|
||||||
|
|
||||||
#endif // NVIM_OS_EVENT_DEFS_H
|
#endif // NVIM_OS_EVENT_DEFS_H
|
||||||
|
@@ -489,7 +489,7 @@ static void emit_exit_event(Job *job)
|
|||||||
{
|
{
|
||||||
Event event = {
|
Event event = {
|
||||||
.source = job_event_source(job),
|
.source = job_event_source(job),
|
||||||
.type = kEventJobExit,
|
.handler = job_exit_event,
|
||||||
.data.job = job
|
.data.job = job
|
||||||
};
|
};
|
||||||
event_push(event);
|
event_push(event);
|
||||||
|
@@ -430,7 +430,7 @@ static void emit_read_event(RStream *rstream, bool eof)
|
|||||||
{
|
{
|
||||||
Event event = {
|
Event event = {
|
||||||
.source = rstream_event_source(rstream),
|
.source = rstream_event_source(rstream),
|
||||||
.type = kEventRStreamData,
|
.handler = rstream_read_event,
|
||||||
.data.rstream = {
|
.data.rstream = {
|
||||||
.ptr = rstream,
|
.ptr = rstream,
|
||||||
.eof = eof
|
.eof = eof
|
||||||
|
@@ -164,7 +164,7 @@ static void signal_cb(uv_signal_t *handle, int signum)
|
|||||||
|
|
||||||
Event event = {
|
Event event = {
|
||||||
.source = signal_event_source(),
|
.source = signal_event_source(),
|
||||||
.type = kEventSignal,
|
.handler = signal_handle,
|
||||||
.data = {
|
.data = {
|
||||||
.signum = signum
|
.signum = signum
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user