aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/event
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2017-12-02 03:53:23 +0100
committerJustin M. Keyes <justinkz@gmail.com>2017-12-02 15:55:09 +0100
commit4b83f3791257c0aecff6c35dbe9a644a1a72418c (patch)
tree8a0ccd660df63bb61f315bc7e6069af961d14861 /src/nvim/event
parent27f9b1c7b029d8f61723fd261bed76ea7a01e68d (diff)
downloadrneovim-4b83f3791257c0aecff6c35dbe9a644a1a72418c.tar.gz
rneovim-4b83f3791257c0aecff6c35dbe9a644a1a72418c.tar.bz2
rneovim-4b83f3791257c0aecff6c35dbe9a644a1a72418c.zip
tui.c: request focus-reporting (fix regression) #7670
ref #7649 ref #7664 27f9b1c7b029d8 caused a regression: it uses loop_schedule_deferred() to defer emitting the "enable focus reporting" termcode. tui_main() never processes `tui_loop.events` (which loop_schedule_deferred() depends on), so the event was never actually processed. But fixing that (by processing `tui_loop.events`) would bring back the problem 27f9b1c7b029 tried to fix: it still emits the event too soon. Instead, do a little dance: schedule the event on `main_loop` and then forward it to `tui_loop`. NOTE: after this commit, in tmux 2.3 with `focus-events` enabled, FocusGained is fired on startup and when resuming from suspend. Using `script` to record the terminal session (and `vterm-dump` to post-process the result): BEFORE: {DECSM 1049}{DECSM 1}{ESC =} {CUP *}{ED *}{DECSM 2004}{DECSM 1004}{CSI 1,43 r} {CUP 1,1} {CUP *}{ED *}{SM 34}{DECSM 25} {DECRM 25}{CSI 2 q}{CSI 2 q} {CUP *}{ED *}{LF} {SGR *}{LS1}{SGR 94}~ ... AFTER: {CUP *}{ED *}{CSI 1,43 r} {CUP 1,1} {CUP *}{ED *}{SM 34}{DECSM 25} {DECRM 25}{CSI 2 q}{CSI 2 q} {CUP *}{ED *}{DECSM 2004}{DECSM 1004}{LF} {SGR *}{LS1}{SGR 94}~ ...
Diffstat (limited to 'src/nvim/event')
-rw-r--r--src/nvim/event/loop.h9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/nvim/event/loop.h b/src/nvim/event/loop.h
index b0ddc59469..d1a40d5cc9 100644
--- a/src/nvim/event/loop.h
+++ b/src/nvim/event/loop.h
@@ -19,12 +19,11 @@ typedef struct loop {
MultiQueue *events;
MultiQueue *thread_events;
// Immediate events:
- // "Events that should be processed after exiting uv_run() (to avoid
- // recursion), but before returning from loop_poll_events()."
- // 502aee690c980fcb3cfcb3f211dcfad06103db46
- // Practical consequence: these events are processed by
+ // "Processed after exiting uv_run() (to avoid recursion), but before
+ // returning from loop_poll_events()." 502aee690c98
+ // Practical consequence (for main_loop): these events are processed by
// state_enter()..os_inchar()
- // whereas "regular" (main_loop.events) events are processed by
+ // whereas "regular" events (main_loop.events) are processed by
// state_enter()..VimState.execute()
// But state_enter()..os_inchar() can be "too early" if you want the event
// to trigger UI updates and other user-activity-related side-effects.