diff options
author | Thiago de Arruda <tpadilha84@gmail.com> | 2014-11-21 15:34:18 -0300 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-11-21 15:41:02 -0300 |
commit | f09a33bbc131138f67aa13752559ade2d4e577c2 (patch) | |
tree | d204eca11f8ea4fa128016f68a1bc0f8af62ff18 /src/nvim/os/event.c | |
parent | 230c935e73c0eb8359b18f0da9ce2238cd7830bc (diff) | |
download | rneovim-f09a33bbc131138f67aa13752559ade2d4e577c2.tar.gz rneovim-f09a33bbc131138f67aa13752559ade2d4e577c2.tar.bz2 rneovim-f09a33bbc131138f67aa13752559ade2d4e577c2.zip |
event: No longer process K_EVENT automatically
Two new functions, `event_enable_deferred()`/`event_disable_deferred()` have to
be called by code that is capable of handling asynchronicity. User-dialog states
like "press ENTER to continue" or the swap file confirmation no longer will
generate K_EVENT.
Diffstat (limited to 'src/nvim/os/event.c')
-rw-r--r-- | src/nvim/os/event.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/nvim/os/event.c b/src/nvim/os/event.c index 1477072f4f..34560610bd 100644 --- a/src/nvim/os/event.c +++ b/src/nvim/os/event.c @@ -18,6 +18,8 @@ #include "nvim/vim.h" #include "nvim/memory.h" #include "nvim/misc2.h" +#include "nvim/term.h" +#include "nvim/screen.h" #include "nvim/lib/klist.h" @@ -39,6 +41,7 @@ typedef struct { // loop(to avoid recursion), but before returning from // `event_poll` static klist_t(Event) *deferred_events = NULL, *immediate_events = NULL; +static int deferred_events_allowed = 0; void event_init(void) { @@ -134,7 +137,17 @@ void event_poll(int ms) bool event_has_deferred(void) { - return !kl_empty(deferred_events); + return deferred_events_allowed && !kl_empty(deferred_events); +} + +void event_enable_deferred(void) +{ + ++deferred_events_allowed; +} + +void event_disable_deferred(void) +{ + --deferred_events_allowed; } // Queue an event @@ -146,6 +159,11 @@ void event_push(Event event, bool deferred) void event_process(void) { process_events_from(deferred_events); + + if (must_redraw) { + update_screen(0); + out_flush(); + } } static void process_events_from(klist_t(Event) *queue) |