Skip to content

Commit 452030e

Browse files
committed
patch 8.0.1146: redraw when highlight is set with same names
Problem: Redraw when highlight is set with same names. (Ozaki Kiichi) Solution: Only free and save a name when it changed. (closes #2120)
1 parent 0c6a329 commit 452030e

File tree

2 files changed

+56
-23
lines changed

2 files changed

+56
-23
lines changed

src/syntax.c

Lines changed: 54 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7969,6 +7969,8 @@ do_highlight(
79697969
}
79707970
else if (STRCMP(key, "GUIFG") == 0)
79717971
{
7972+
char_u **namep = &HL_TABLE()[idx].sg_gui_fg_name;
7973+
79727974
#if defined(FEAT_GUI) || defined(FEAT_EVAL)
79737975
if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI))
79747976
{
@@ -7982,22 +7984,33 @@ do_highlight(
79827984
{
79837985
HL_TABLE()[idx].sg_gui_fg = i;
79847986
# endif
7985-
vim_free(HL_TABLE()[idx].sg_gui_fg_name);
7986-
if (STRCMP(arg, "NONE") != 0)
7987-
HL_TABLE()[idx].sg_gui_fg_name = vim_strsave(arg);
7988-
else
7989-
HL_TABLE()[idx].sg_gui_fg_name = NULL;
7987+
if (*namep == NULL || STRCMP(*namep, arg) != 0)
7988+
{
7989+
vim_free(*namep);
7990+
if (STRCMP(arg, "NONE") != 0)
7991+
*namep = vim_strsave(arg);
7992+
else
7993+
*namep = NULL;
7994+
}
79907995
# if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
79917996
# ifdef FEAT_GUI_X11
7992-
if (is_menu_group)
7997+
if (is_menu_group && gui.menu_fg_pixel != i)
7998+
{
79937999
gui.menu_fg_pixel = i;
7994-
if (is_scrollbar_group)
8000+
do_colors = TRUE;
8001+
}
8002+
if (is_scrollbar_group && gui.scroll_fg_pixel != i)
8003+
{
79958004
gui.scroll_fg_pixel = i;
8005+
do_colors = TRUE;
8006+
}
79968007
# ifdef FEAT_BEVAL
7997-
if (is_tooltip_group)
8008+
if (is_tooltip_group && gui.tooltip_fg_pixel != i)
8009+
{
79988010
gui.tooltip_fg_pixel = i;
8011+
do_colors = TRUE;
8012+
}
79998013
# endif
8000-
do_colors = TRUE;
80018014
# endif
80028015
}
80038016
# endif
@@ -8006,6 +8019,8 @@ do_highlight(
80068019
}
80078020
else if (STRCMP(key, "GUIBG") == 0)
80088021
{
8022+
char_u **namep = &HL_TABLE()[idx].sg_gui_bg_name;
8023+
80098024
#if defined(FEAT_GUI) || defined(FEAT_EVAL)
80108025
if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI))
80118026
{
@@ -8019,22 +8034,33 @@ do_highlight(
80198034
{
80208035
HL_TABLE()[idx].sg_gui_bg = i;
80218036
# endif
8022-
vim_free(HL_TABLE()[idx].sg_gui_bg_name);
8023-
if (STRCMP(arg, "NONE") != 0)
8024-
HL_TABLE()[idx].sg_gui_bg_name = vim_strsave(arg);
8025-
else
8026-
HL_TABLE()[idx].sg_gui_bg_name = NULL;
8037+
if (*namep == NULL || STRCMP(*namep, arg) != 0)
8038+
{
8039+
vim_free(*namep);
8040+
if (STRCMP(arg, "NONE") != 0)
8041+
*namep = vim_strsave(arg);
8042+
else
8043+
*namep = NULL;
8044+
}
80278045
# if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
80288046
# ifdef FEAT_GUI_X11
8029-
if (is_menu_group)
8047+
if (is_menu_group && gui.menu_bg_pixel != i)
8048+
{
80308049
gui.menu_bg_pixel = i;
8031-
if (is_scrollbar_group)
8050+
do_colors = TRUE;
8051+
}
8052+
if (is_scrollbar_group && gui.scroll_bg_pixel != i)
8053+
{
80328054
gui.scroll_bg_pixel = i;
8055+
do_colors = TRUE;
8056+
}
80338057
# ifdef FEAT_BEVAL
8034-
if (is_tooltip_group)
8058+
if (is_tooltip_group && gui.tooltip_bg_pixel != i)
8059+
{
80358060
gui.tooltip_bg_pixel = i;
8061+
do_colors = TRUE;
8062+
}
80368063
# endif
8037-
do_colors = TRUE;
80388064
# endif
80398065
}
80408066
# endif
@@ -8043,6 +8069,8 @@ do_highlight(
80438069
}
80448070
else if (STRCMP(key, "GUISP") == 0)
80458071
{
8072+
char_u **namep = &HL_TABLE()[idx].sg_gui_sp_name;
8073+
80468074
#if defined(FEAT_GUI) || defined(FEAT_EVAL)
80478075
if (!init || !(HL_TABLE()[idx].sg_set & SG_GUI))
80488076
{
@@ -8055,11 +8083,14 @@ do_highlight(
80558083
{
80568084
HL_TABLE()[idx].sg_gui_sp = i;
80578085
# endif
8058-
vim_free(HL_TABLE()[idx].sg_gui_sp_name);
8059-
if (STRCMP(arg, "NONE") != 0)
8060-
HL_TABLE()[idx].sg_gui_sp_name = vim_strsave(arg);
8061-
else
8062-
HL_TABLE()[idx].sg_gui_sp_name = NULL;
8086+
if (*namep == NULL || STRCMP(*namep, arg) != 0)
8087+
{
8088+
vim_free(*namep);
8089+
if (STRCMP(arg, "NONE") != 0)
8090+
*namep = vim_strsave(arg);
8091+
else
8092+
*namep = NULL;
8093+
}
80638094
# ifdef FEAT_GUI
80648095
}
80658096
# endif

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,8 @@ static char *(features[]) =
761761

762762
static int included_patches[] =
763763
{ /* Add new patch number below this line */
764+
/**/
765+
1146,
764766
/**/
765767
1145,
766768
/**/

0 commit comments

Comments
 (0)