diff options
author | Thiago de Arruda <tpadilha84@gmail.com> | 2014-10-20 08:44:46 -0300 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-10-21 11:05:49 -0300 |
commit | 77cc078c41c4348a3649cc366a262e6fab43980b (patch) | |
tree | 80e6df8ed06db3388beeff54f27e2c1beef511cd | |
parent | cf6f60ce4dc376570e8d71facea76299ca951604 (diff) | |
download | rneovim-77cc078c41c4348a3649cc366a262e6fab43980b.tar.gz rneovim-77cc078c41c4348a3649cc366a262e6fab43980b.tar.bz2 rneovim-77cc078c41c4348a3649cc366a262e6fab43980b.zip |
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.
-rw-r--r-- | src/nvim/os/event.c | 14 | ||||
-rw-r--r-- | src/nvim/os/event_defs.h | 14 | ||||
-rw-r--r-- | src/nvim/os/job.c | 2 | ||||
-rw-r--r-- | src/nvim/os/rstream.c | 2 | ||||
-rw-r--r-- | src/nvim/os/signal.c | 2 |
5 files changed, 9 insertions, 25 deletions
diff --git a/src/nvim/os/event.c b/src/nvim/os/event.c index f20d43c6a4..43c02b13b2 100644 --- a/src/nvim/os/event.c +++ b/src/nvim/os/event.c @@ -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++; } diff --git a/src/nvim/os/event_defs.h b/src/nvim/os/event_defs.h index dbee3e2ba7..553d4e3125 100644 --- a/src/nvim/os/event_defs.h +++ b/src/nvim/os/event_defs.h @@ -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 diff --git a/src/nvim/os/job.c b/src/nvim/os/job.c index 2ca1023290..d0ac82c047 100644 --- a/src/nvim/os/job.c +++ b/src/nvim/os/job.c @@ -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); diff --git a/src/nvim/os/rstream.c b/src/nvim/os/rstream.c index 8f1c30de50..b95098cc52 100644 --- a/src/nvim/os/rstream.c +++ b/src/nvim/os/rstream.c @@ -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 diff --git a/src/nvim/os/signal.c b/src/nvim/os/signal.c index 2f93cfb08a..b330c7f788 100644 --- a/src/nvim/os/signal.c +++ b/src/nvim/os/signal.c @@ -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 } |