diff options
| author | b-r-o-c-k <brockmammen@gmail.com> | 2018-04-14 14:17:51 -0500 | 
|---|---|---|
| committer | b-r-o-c-k <brockmammen@gmail.com> | 2018-04-14 14:17:51 -0500 | 
| commit | ad999eaa775d7d4b0cacedb30c6ea3a0ee699a6f (patch) | |
| tree | 92de2079e80f5f289dd87a54af123cb7d90c3058 /src/nvim/ui_bridge.c | |
| parent | 78bc52ea5397c092d01cd08296fe1dc85d998329 (diff) | |
| parent | ef4feab0e75be19c5f41d70a001db980b72090f5 (diff) | |
| download | rneovim-ad999eaa775d7d4b0cacedb30c6ea3a0ee699a6f.tar.gz rneovim-ad999eaa775d7d4b0cacedb30c6ea3a0ee699a6f.tar.bz2 rneovim-ad999eaa775d7d4b0cacedb30c6ea3a0ee699a6f.zip  | |
Merge branch 'master' into s-dash-stdin
Diffstat (limited to 'src/nvim/ui_bridge.c')
| -rw-r--r-- | src/nvim/ui_bridge.c | 17 | 
1 files changed, 10 insertions, 7 deletions
diff --git a/src/nvim/ui_bridge.c b/src/nvim/ui_bridge.c index 5585886612..56e0c0c454 100644 --- a/src/nvim/ui_bridge.c +++ b/src/nvim/ui_bridge.c @@ -59,16 +59,15 @@ UI *ui_bridge_attach(UI *ui, ui_main_fn ui_main, event_scheduler scheduler)    rv->bridge.put = ui_bridge_put;    rv->bridge.bell = ui_bridge_bell;    rv->bridge.visual_bell = ui_bridge_visual_bell; -  rv->bridge.update_fg = ui_bridge_update_fg; -  rv->bridge.update_bg = ui_bridge_update_bg; -  rv->bridge.update_sp = ui_bridge_update_sp; +  rv->bridge.default_colors_set = ui_bridge_default_colors_set;    rv->bridge.flush = ui_bridge_flush;    rv->bridge.suspend = ui_bridge_suspend;    rv->bridge.set_title = ui_bridge_set_title;    rv->bridge.set_icon = ui_bridge_set_icon; +  rv->bridge.option_set = ui_bridge_option_set;    rv->scheduler = scheduler; -  for (UIWidget i = 0; (int)i < UI_WIDGETS; i++) { +  for (UIExtension i = 0; (int)i < kUIExtCount; i++) {      rv->bridge.ui_ext[i] = ui->ui_ext[i];    } @@ -82,6 +81,7 @@ UI *ui_bridge_attach(UI *ui, ui_main_fn ui_main, event_scheduler scheduler)      abort();    } +  // Suspend the main thread until CONTINUE is called by the UI thread.    while (!rv->ready) {      uv_cond_wait(&rv->cond, &rv->mutex);    } @@ -106,6 +106,9 @@ static void ui_thread_run(void *data)  static void ui_bridge_stop(UI *b)  { +  // Detach brigde first, so that "stop" is the last event the TUI loop +  // receives from the main thread. #8041 +  ui_detach_impl(b);    UIBridgeData *bridge = (UIBridgeData *)b;    bool stopped = bridge->stopped = false;    UI_BRIDGE_CALL(b, stop, 1, b); @@ -116,12 +119,12 @@ static void ui_bridge_stop(UI *b)      if (stopped) {        break;      } -    loop_poll_events(&main_loop, 10); +    loop_poll_events(&main_loop, 10);  // Process one event.    }    uv_thread_join(&bridge->ui_thread);    uv_mutex_destroy(&bridge->mutex);    uv_cond_destroy(&bridge->cond); -  ui_detach_impl(b); +  xfree(bridge->ui);  // Threads joined, now safe to free UI container. #7922    xfree(b);  }  static void ui_bridge_stop_event(void **argv) @@ -149,7 +152,7 @@ static void ui_bridge_suspend(UI *b)    uv_mutex_lock(&data->mutex);    UI_BRIDGE_CALL(b, suspend, 1, b);    data->ready = false; -  // suspend the main thread until CONTINUE is called by the UI thread +  // Suspend the main thread until CONTINUE is called by the UI thread.    while (!data->ready) {      uv_cond_wait(&data->cond, &data->mutex);    }  | 
