aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/ui.c
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2023-12-04 09:50:00 +0100
committerbfredl <bjorn.linse@gmail.com>2023-12-06 18:46:39 +0100
commit8f10362cdc5835a1cd86c8195ce8e3b10ab85384 (patch)
treefd0536f05bc312605ef483292346778b51fcaf5a /src/nvim/ui.c
parent040369e1e4b86c4655a6885b36ee89ad4f10ca16 (diff)
downloadrneovim-8f10362cdc5835a1cd86c8195ce8e3b10ab85384.tar.gz
rneovim-8f10362cdc5835a1cd86c8195ce8e3b10ab85384.tar.bz2
rneovim-8f10362cdc5835a1cd86c8195ce8e3b10ab85384.zip
fix(startup): only send one default_colors_set event during startup
If the color scheme is changed in a startup script, nvim used to send multiple default_colors_set events, one for the default color scheme and one for the user's chosen color scheme. This would cause flicker in some UI:s. Throttle this event until we actually start drawing on the screen. fixes #26372
Diffstat (limited to 'src/nvim/ui.c')
-rw-r--r--src/nvim/ui.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/nvim/ui.c b/src/nvim/ui.c
index cb4ebb5c3b..a78a5b077f 100644
--- a/src/nvim/ui.c
+++ b/src/nvim/ui.c
@@ -63,6 +63,7 @@ bool ui_cb_ext[kUIExtCount]; ///< Internalized UI capabilities.
static bool has_mouse = false;
static int pending_has_mouse = -1;
+static bool pending_default_colors = false;
static Array call_buf = ARRAY_DICT_INIT;
@@ -283,8 +284,21 @@ void ui_schedule_refresh(void)
void ui_default_colors_set(void)
{
- ui_call_default_colors_set(normal_fg, normal_bg, normal_sp,
- cterm_normal_fg_color, cterm_normal_bg_color);
+ // Throttle setting of default colors at startup, so it only happens once
+ // if the user sets the colorscheme in startup.
+ pending_default_colors = true;
+ if (starting == 0) {
+ ui_may_set_default_colors();
+ }
+}
+
+static void ui_may_set_default_colors(void)
+{
+ if (pending_default_colors) {
+ pending_default_colors = false;
+ ui_call_default_colors_set(normal_fg, normal_bg, normal_sp,
+ cterm_normal_fg_color, cterm_normal_bg_color);
+ }
}
void ui_busy_start(void)
@@ -442,6 +456,9 @@ void ui_line(ScreenGrid *grid, int row, int startcol, int endcol, int clearcol,
flags |= kLineFlagInvalid;
}
+ // set default colors now so that that text won't have to be repainted later
+ ui_may_set_default_colors();
+
size_t off = grid->line_offset[row] + (size_t)startcol;
ui_call_raw_line(grid->handle, row, startcol, endcol, clearcol, clearattr,