diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2018-06-02 15:33:15 +0200 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2018-06-02 17:44:48 +0200 |
commit | b8331e1a1cc99129495e655bce171f583661edda (patch) | |
tree | 55d6dbaf1c42da36098c58b13689b19cfa688347 /src | |
parent | 5be3865ce73e692056034e320d5fd525b9db22c2 (diff) | |
download | rneovim-b8331e1a1cc99129495e655bce171f583661edda.tar.gz rneovim-b8331e1a1cc99129495e655bce171f583661edda.tar.bz2 rneovim-b8331e1a1cc99129495e655bce171f583661edda.zip |
tui: handle termguicolors rgb value in bridge for now
When/if TUI/bridge teardown is refactored to use events, this
commit can be reverted.
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/api/ui_events.in.h | 2 | ||||
-rw-r--r-- | src/nvim/tui/tui.c | 9 | ||||
-rw-r--r-- | src/nvim/ui_bridge.c | 25 |
3 files changed, 26 insertions, 10 deletions
diff --git a/src/nvim/api/ui_events.in.h b/src/nvim/api/ui_events.in.h index 96d494460b..3ef16a7ac3 100644 --- a/src/nvim/api/ui_events.in.h +++ b/src/nvim/api/ui_events.in.h @@ -62,7 +62,7 @@ void set_title(String title) void set_icon(String icon) FUNC_API_SINCE(3); void option_set(String name, Object value) - FUNC_API_SINCE(4); + FUNC_API_SINCE(4) FUNC_API_BRIDGE_IMPL; void popupmenu_show(Array items, Integer selected, Integer row, Integer col) FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY; diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c index 19835443ef..65957626cb 100644 --- a/src/nvim/tui/tui.c +++ b/src/nvim/tui/tui.c @@ -1172,18 +1172,9 @@ static void tui_option_set(UI *ui, String name, Object value) if (strequal(name.data, "termguicolors")) { ui->rgb = value.data.boolean; invalidate(ui, 0, data->grid.height-1, 0, data->grid.width-1); - loop_schedule(&main_loop, event_create(termguicolors_set_event, - 2, ui, (void *)ui->rgb)); } } -static void termguicolors_set_event(void **argv) -{ - UI *ui = argv[0]; - TUIData *data = ui->data; - data->bridge->bridge.rgb = (Boolean)argv[1]; -} - static void invalidate(UI *ui, int top, int bot, int left, int right) { TUIData *data = ui->data; diff --git a/src/nvim/ui_bridge.c b/src/nvim/ui_bridge.c index a8bbeea035..56db124a46 100644 --- a/src/nvim/ui_bridge.c +++ b/src/nvim/ui_bridge.c @@ -163,3 +163,28 @@ static void ui_bridge_suspend_event(void **argv) UI *ui = UI(argv[0]); ui->suspend(ui); } + +static void ui_bridge_option_set(UI *ui, String name, Object value) +{ + String copy_name = copy_string(name); + Object *copy_value = xmalloc(sizeof(Object)); + *copy_value = copy_object(value); + UI_BRIDGE_CALL(ui, option_set, 4, ui, copy_name.data, + INT2PTR(copy_name.size), copy_value); + // TODO(bfredl): when/if TUI/bridge teardown is refactored to use events, the + // commit that introduced this special case can be reverted. + // For now this is needed for nvim_list_uis(). + if (strequal(name.data, "termguicolors")) { + ui->rgb = value.data.boolean; + } +} +static void ui_bridge_option_set_event(void **argv) +{ + UI *ui = UI(argv[0]); + String name = (String){ .data = argv[1], .size = (size_t)argv[2] }; + Object value = *(Object *)argv[3]; + ui->option_set(ui, name, value); + api_free_string(name); + api_free_object(value); + xfree(argv[3]); +} |