@@ -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
0 commit comments