aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/tui
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2015-07-16 23:10:04 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2015-07-17 00:19:19 -0300
commit991d3ec1e679bb6407f2a5820910d2968424183c (patch)
tree38810fb657e1e1ea9d77b7a7963e874e8bda99d1 /src/nvim/tui
parent9e42ef4e1312fb6888d2691e9d979b95dd43ec94 (diff)
downloadrneovim-991d3ec1e679bb6407f2a5820910d2968424183c.tar.gz
rneovim-991d3ec1e679bb6407f2a5820910d2968424183c.tar.bz2
rneovim-991d3ec1e679bb6407f2a5820910d2968424183c.zip
event loop: New abstraction layer with refactored time/signal API
- Add event loop abstraction module under src/nvim/event. The src/nvim/event/loop module replaces src/nvim/os/event - Remove direct dependency on libuv signal/timer API and use the new abstraction instead. - Replace all references to uv_default_loop() by &loop.uv, a new global variable that wraps libuv main event loop but allows the event loop functions to be reused in other contexts.
Diffstat (limited to 'src/nvim/tui')
-rw-r--r--src/nvim/tui/term_input.inl24
-rw-r--r--src/nvim/tui/tui.c20
2 files changed, 22 insertions, 22 deletions
diff --git a/src/nvim/tui/term_input.inl b/src/nvim/tui/term_input.inl
index efdcf0a41e..331a0a89e0 100644
--- a/src/nvim/tui/term_input.inl
+++ b/src/nvim/tui/term_input.inl
@@ -5,6 +5,7 @@
#include "nvim/os/os.h"
#include "nvim/os/input.h"
#include "nvim/os/rstream.h"
+#include "nvim/event/time.h"
#define PASTETOGGLE_KEY "<f37>"
@@ -12,7 +13,7 @@ struct term_input {
int in_fd;
bool paste_enabled;
TermKey *tk;
- uv_timer_t timer_handle;
+ TimeWatcher timer_handle;
RBuffer *read_buffer;
RStream *read_stream;
};
@@ -107,7 +108,7 @@ static TermKeyResult tk_getkey(TermKey *tk, TermKeyKey *key, bool force)
return force ? termkey_getkey_force(tk, key) : termkey_getkey(tk, key);
}
-static void timer_cb(uv_timer_t *handle);
+static void timer_cb(TimeWatcher *watcher, void *data);
static int get_key_code_timeout(void)
{
@@ -147,17 +148,16 @@ static void tk_getkeys(TermInput *input, bool force)
if (ms > 0) {
// Stop the current timer if already running
- uv_timer_stop(&input->timer_handle);
- uv_timer_start(&input->timer_handle, timer_cb, (uint32_t)ms, 0);
+ time_watcher_stop(&input->timer_handle);
+ time_watcher_start(&input->timer_handle, timer_cb, (uint32_t)ms, 0);
} else {
tk_getkeys(input, true);
}
}
-
-static void timer_cb(uv_timer_t *handle)
+static void timer_cb(TimeWatcher *watcher, void *data)
{
- tk_getkeys(handle->data, true);
+ tk_getkeys(data, true);
}
static bool handle_bracketed_paste(TermInput *input)
@@ -288,8 +288,7 @@ static TermInput *term_input_new(void)
rstream_set_file(rv->read_stream, rv->in_fd);
rstream_start(rv->read_stream);
// initialize a timer handle for handling ESC with libtermkey
- uv_timer_init(uv_default_loop(), &rv->timer_handle);
- rv->timer_handle.data = rv;
+ time_watcher_init(&loop, &rv->timer_handle, rv);
// Set the pastetoggle option to a special key that will be sent when
// \e[20{0,1}~/ are received
Error err = ERROR_INIT;
@@ -300,12 +299,13 @@ static TermInput *term_input_new(void)
static void term_input_destroy(TermInput *input)
{
- uv_timer_stop(&input->timer_handle);
+ time_watcher_stop(&input->timer_handle);
+ time_watcher_close(&input->timer_handle, NULL);
rstream_stop(input->read_stream);
rstream_free(input->read_stream);
- uv_close((uv_handle_t *)&input->timer_handle, NULL);
termkey_destroy(input->tk);
- event_poll(0); // Run once to remove references to input/timer handles
+ // Run once to remove references to input/timer handles
+ loop_poll_events(&loop, 0);
xfree(input);
}
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c
index fe29dbd961..a12ee880d6 100644
--- a/src/nvim/tui/tui.c
+++ b/src/nvim/tui/tui.c
@@ -13,7 +13,8 @@
#include "nvim/memory.h"
#include "nvim/api/vim.h"
#include "nvim/api/private/helpers.h"
-#include "nvim/os/event.h"
+#include "nvim/event/loop.h"
+#include "nvim/event/signal.h"
#include "nvim/tui/tui.h"
#include "nvim/strings.h"
@@ -43,7 +44,7 @@ typedef struct {
uv_loop_t *write_loop;
unibi_term *ut;
uv_tty_t output_handle;
- uv_signal_t winch_handle;
+ SignalWatcher winch_handle;
Rect scroll_region;
kvec_t(Rect) invalid_regions;
int row, col;
@@ -132,9 +133,8 @@ UI *tui_start(void)
update_size(ui);
// listen for SIGWINCH
- uv_signal_init(uv_default_loop(), &data->winch_handle);
- uv_signal_start(&data->winch_handle, sigwinch_cb, SIGWINCH);
- data->winch_handle.data = ui;
+ signal_watcher_init(&loop, &data->winch_handle, ui);
+ signal_watcher_start(&data->winch_handle, sigwinch_cb, SIGWINCH);
ui->stop = tui_stop;
ui->rgb = os_getenv("NVIM_TUI_ENABLE_TRUE_COLOR") != NULL;
@@ -172,8 +172,8 @@ static void tui_stop(UI *ui)
TUIData *data = ui->data;
// Destroy common stuff
kv_destroy(data->invalid_regions);
- uv_signal_stop(&data->winch_handle);
- uv_close((uv_handle_t *)&data->winch_handle, NULL);
+ signal_watcher_stop(&data->winch_handle);
+ signal_watcher_close(&data->winch_handle, NULL);
// Destroy input stuff
term_input_destroy(data->input);
// Destroy output stuff
@@ -207,12 +207,12 @@ static void try_resize(Event ev)
ui_refresh();
}
-static void sigwinch_cb(uv_signal_t *handle, int signum)
+static void sigwinch_cb(SignalWatcher *watcher, int signum, void *data)
{
// Queue the event because resizing can result in recursive event_poll calls
// FIXME(blueyed): TUI does not resize properly when not deferred. Why? #2322
- event_push((Event) {
- .data = handle->data,
+ loop_push_event(&loop, (Event) {
+ .data = data,
.handler = try_resize
}, true);
}