aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2018-06-02 15:33:15 +0200
committerBjörn Linse <bjorn.linse@gmail.com>2018-06-02 17:44:48 +0200
commitb8331e1a1cc99129495e655bce171f583661edda (patch)
tree55d6dbaf1c42da36098c58b13689b19cfa688347 /src
parent5be3865ce73e692056034e320d5fd525b9db22c2 (diff)
downloadrneovim-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.h2
-rw-r--r--src/nvim/tui/tui.c9
-rw-r--r--src/nvim/ui_bridge.c25
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]);
+}