diff options
author | Eliseo Martínez <eliseomarmol@gmail.com> | 2014-05-12 02:25:17 +0200 |
---|---|---|
committer | Eliseo Martínez <eliseomarmol@gmail.com> | 2014-05-15 20:46:01 +0200 |
commit | da51dc9cf202772f60bd2da975dbef257bd9237c (patch) | |
tree | 5c16b93238a153f55634e9323077f30c8133970c /src/os/event.c | |
parent | ffe61e5ba1721340ca51d56bae3ddaca415fb5bc (diff) | |
download | rneovim-da51dc9cf202772f60bd2da975dbef257bd9237c.tar.gz rneovim-da51dc9cf202772f60bd2da975dbef257bd9237c.tar.bz2 rneovim-da51dc9cf202772f60bd2da975dbef257bd9237c.zip |
Introduce nvim namespace: Move files.
Move files from src/ to src/nvim/.
- src/nvim/ becomes the new root dir for nvim executable sources.
- src/libnvim/ is planned to become root dir of the neovim library.
Diffstat (limited to 'src/os/event.c')
-rw-r--r-- | src/os/event.c | 148 |
1 files changed, 0 insertions, 148 deletions
diff --git a/src/os/event.c b/src/os/event.c deleted file mode 100644 index 2c25852778..0000000000 --- a/src/os/event.c +++ /dev/null @@ -1,148 +0,0 @@ -#include <stdint.h> -#include <stdbool.h> -#include <stdlib.h> - -#include <uv.h> - -#include "lib/klist.h" -#include "os/event.h" -#include "os/input.h" -#include "os/channel.h" -#include "os/server.h" -#include "os/signal.h" -#include "os/rstream.h" -#include "os/job.h" -#include "vim.h" -#include "memory.h" -#include "misc2.h" - -// event will be cleaned up after it gets processed -#define _destroy_event(x) // do nothing -KLIST_INIT(Event, Event, _destroy_event) - -static klist_t(Event) *event_queue; -static uv_timer_t timer; -static uv_prepare_t timer_prepare; -static void timer_cb(uv_timer_t *handle); -static void timer_prepare_cb(uv_prepare_t *); - -void event_init() -{ - // Initialize the event queue - event_queue = kl_init(Event); - // Initialize input events - input_init(); - // Timer to wake the event loop if a timeout argument is passed to - // `event_poll` - // Signals - signal_init(); - // Jobs - job_init(); - // Channels - channel_init(); - // Servers - server_init(); - uv_timer_init(uv_default_loop(), &timer); - // This prepare handle that actually starts the timer - uv_prepare_init(uv_default_loop(), &timer_prepare); -} - -void event_teardown() -{ - channel_teardown(); - job_teardown(); - server_teardown(); -} - -// Wait for some event -bool event_poll(int32_t ms) -{ - bool timed_out; - uv_run_mode run_mode = UV_RUN_ONCE; - - if (input_ready()) { - // If there's a pending input event to be consumed, do it now - return true; - } - - input_start(); - timed_out = false; - - if (ms > 0) { - // Timeout passed as argument to the timer - timer.data = &timed_out; - // We only start the timer after the loop is running, for that we - // use an prepare handle(pass the interval as data to it) - timer_prepare.data = &ms; - uv_prepare_start(&timer_prepare, timer_prepare_cb); - } else if (ms == 0) { - // For ms == 0, we need to do a non-blocking event poll by - // setting the run mode to UV_RUN_NOWAIT. - run_mode = UV_RUN_NOWAIT; - } - - do { - // Run one event loop iteration, blocking for events if run_mode is - // UV_RUN_ONCE - uv_run(uv_default_loop(), run_mode); - } while ( - // Continue running if ... - !input_ready() && // we have no input - kl_empty(event_queue) && // no events are waiting to be processed - run_mode != UV_RUN_NOWAIT && // ms != 0 - !timed_out); // we didn't get a timeout - - input_stop(); - - if (ms > 0) { - // Stop the timer - uv_timer_stop(&timer); - } - - return input_ready() || event_is_pending(); -} - -bool event_is_pending() -{ - return !kl_empty(event_queue); -} - -// Push an event to the queue -void event_push(Event event) -{ - *kl_pushp(Event, event_queue) = event; -} - -// Runs the appropriate action for each queued event -void event_process() -{ - Event event; - - while (kl_shift(Event, 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(); - } - } -} - -// Set a flag in the `event_poll` loop for signaling of a timeout -static void timer_cb(uv_timer_t *handle) -{ - *((bool *)handle->data) = true; -} - -static void timer_prepare_cb(uv_prepare_t *handle) -{ - uv_timer_start(&timer, timer_cb, *(uint32_t *)timer_prepare.data, 0); - uv_prepare_stop(&timer_prepare); -} |