diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2019-05-09 23:31:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-09 23:31:30 +0200 |
commit | d818135e3f45fc72ceba19c0ffc035ed77d120af (patch) | |
tree | 83fc23b9a1f8489baa073559e48dab23fcc59dae /src | |
parent | b6ad20602498e260b3c7ede79699d986e96903da (diff) | |
parent | b9ad12e6c2fa557e2c2c2f2f6c40fabc0cc89efd (diff) | |
download | rneovim-d818135e3f45fc72ceba19c0ffc035ed77d120af.tar.gz rneovim-d818135e3f45fc72ceba19c0ffc035ed77d120af.tar.bz2 rneovim-d818135e3f45fc72ceba19c0ffc035ed77d120af.zip |
Merge #9992 from justinmk/ui-upgrade
UI/nvim_ui_attach(): add "override" option
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/api/ui.c | 10 | ||||
-rw-r--r-- | src/nvim/ui.c | 15 | ||||
-rw-r--r-- | src/nvim/ui.h | 6 |
3 files changed, 28 insertions, 3 deletions
diff --git a/src/nvim/api/ui.c b/src/nvim/api/ui.c index fd94418d48..9f12ae6888 100644 --- a/src/nvim/api/ui.c +++ b/src/nvim/api/ui.c @@ -110,6 +110,7 @@ void nvim_ui_attach(uint64_t channel_id, Integer width, Integer height, ui->width = (int)width; ui->height = (int)height; ui->rgb = true; + ui->override = false; ui->grid_resize = remote_ui_grid_resize; ui->grid_clear = remote_ui_grid_clear; ui->grid_cursor_goto = remote_ui_grid_cursor_goto; @@ -236,6 +237,15 @@ void nvim_ui_set_option(uint64_t channel_id, String name, static void ui_set_option(UI *ui, bool init, String name, Object value, Error *error) { + if (strequal(name.data, "override")) { + if (value.type != kObjectTypeBoolean) { + api_set_error(error, kErrorTypeValidation, "override must be a Boolean"); + return; + } + ui->override = value.data.boolean; + return; + } + if (strequal(name.data, "rgb")) { if (value.type != kObjectTypeBoolean) { api_set_error(error, kErrorTypeValidation, "rgb must be a Boolean"); diff --git a/src/nvim/ui.c b/src/nvim/ui.c index 0dddfe5f59..7dbb8ec790 100644 --- a/src/nvim/ui.c +++ b/src/nvim/ui.c @@ -141,6 +141,17 @@ bool ui_rgb_attached(void) return false; } +/// Returns true if any UI requested `override=true`. +bool ui_override(void) +{ + for (size_t i = 1; i < ui_count; i++) { + if (uis[i]->override) { + return true; + } + } + return false; +} + bool ui_active(void) { return ui_count > 1; @@ -173,12 +184,13 @@ void ui_refresh(void) ext_widgets[i] = true; } + bool inclusive = ui_override(); for (size_t i = 0; i < ui_count; i++) { UI *ui = uis[i]; width = MIN(ui->width, width); height = MIN(ui->height, height); for (UIExtension j = 0; (int)j < kUIExtCount; j++) { - ext_widgets[j] &= ui->ui_ext[j]; + ext_widgets[j] &= (ui->ui_ext[j] || inclusive); } } @@ -431,6 +443,7 @@ Array ui_array(void) PUT(info, "width", INTEGER_OBJ(ui->width)); PUT(info, "height", INTEGER_OBJ(ui->height)); PUT(info, "rgb", BOOLEAN_OBJ(ui->rgb)); + PUT(info, "override", BOOLEAN_OBJ(ui->override)); for (UIExtension j = 0; j < kUIExtCount; j++) { if (ui_ext_names[j][0] != '_' || ui->ui_ext[j]) { PUT(info, ui_ext_names[j], BOOLEAN_OBJ(ui->ui_ext[j])); diff --git a/src/nvim/ui.h b/src/nvim/ui.h index 3f6b3babad..e1dd18a289 100644 --- a/src/nvim/ui.h +++ b/src/nvim/ui.h @@ -48,9 +48,11 @@ typedef int LineFlags; struct ui_t { bool rgb; + bool override; ///< Force highest-requested UI capabilities. bool composed; - bool ui_ext[kUIExtCount]; ///< Externalized widgets - int width, height; + bool ui_ext[kUIExtCount]; ///< Externalized UI capabilities. + int width; + int height; void *data; #ifdef INCLUDE_GENERATED_DECLARATIONS |