@@ -7970,6 +7970,8 @@ do_highlight(
79707970 }
79717971 else if (STRCMP (key , "GUIFG" ) == 0 )
79727972 {
7973+ char_u * * namep = & HL_TABLE ()[idx ].sg_gui_fg_name ;
7974+
79737975#if defined(FEAT_GUI ) || defined(FEAT_EVAL )
79747976 if (!init || !(HL_TABLE ()[idx ].sg_set & SG_GUI ))
79757977 {
@@ -7983,22 +7985,33 @@ do_highlight(
79837985 {
79847986 HL_TABLE ()[idx ].sg_gui_fg = i ;
79857987# endif
7986- vim_free (HL_TABLE ()[idx ].sg_gui_fg_name );
7987- if (STRCMP (arg , "NONE" ) != 0 )
7988- HL_TABLE ()[idx ].sg_gui_fg_name = vim_strsave (arg );
7989- else
7990- HL_TABLE ()[idx ].sg_gui_fg_name = NULL ;
7988+ if (* namep == NULL || STRCMP (* namep , arg ) != 0 )
7989+ {
7990+ vim_free (* namep );
7991+ if (STRCMP (arg , "NONE" ) != 0 )
7992+ * namep = vim_strsave (arg );
7993+ else
7994+ * namep = NULL ;
7995+ }
79917996# if defined(FEAT_GUI ) || defined(FEAT_TERMGUICOLORS )
79927997# ifdef FEAT_GUI_X11
7993- if (is_menu_group )
7998+ if (is_menu_group && gui .menu_fg_pixel != i )
7999+ {
79948000 gui .menu_fg_pixel = i ;
7995- if (is_scrollbar_group )
8001+ do_colors = TRUE;
8002+ }
8003+ if (is_scrollbar_group && gui .scroll_fg_pixel != i )
8004+ {
79968005 gui .scroll_fg_pixel = i ;
8006+ do_colors = TRUE;
8007+ }
79978008# ifdef FEAT_BEVAL
7998- if (is_tooltip_group )
8009+ if (is_tooltip_group && gui .tooltip_fg_pixel != i )
8010+ {
79998011 gui .tooltip_fg_pixel = i ;
8012+ do_colors = TRUE;
8013+ }
80008014# endif
8001- do_colors = TRUE;
80028015# endif
80038016 }
80048017# endif
@@ -8007,6 +8020,8 @@ do_highlight(
80078020 }
80088021 else if (STRCMP (key , "GUIBG" ) == 0 )
80098022 {
8023+ char_u * * namep = & HL_TABLE ()[idx ].sg_gui_bg_name ;
8024+
80108025#if defined(FEAT_GUI ) || defined(FEAT_EVAL )
80118026 if (!init || !(HL_TABLE ()[idx ].sg_set & SG_GUI ))
80128027 {
@@ -8020,22 +8035,33 @@ do_highlight(
80208035 {
80218036 HL_TABLE ()[idx ].sg_gui_bg = i ;
80228037# endif
8023- vim_free (HL_TABLE ()[idx ].sg_gui_bg_name );
8024- if (STRCMP (arg , "NONE" ) != 0 )
8025- HL_TABLE ()[idx ].sg_gui_bg_name = vim_strsave (arg );
8026- else
8027- HL_TABLE ()[idx ].sg_gui_bg_name = NULL ;
8038+ if (* namep == NULL || STRCMP (* namep , arg ) != 0 )
8039+ {
8040+ vim_free (* namep );
8041+ if (STRCMP (arg , "NONE" ) != 0 )
8042+ * namep = vim_strsave (arg );
8043+ else
8044+ * namep = NULL ;
8045+ }
80288046# if defined(FEAT_GUI ) || defined(FEAT_TERMGUICOLORS )
80298047# ifdef FEAT_GUI_X11
8030- if (is_menu_group )
8048+ if (is_menu_group && gui .menu_bg_pixel != i )
8049+ {
80318050 gui .menu_bg_pixel = i ;
8032- if (is_scrollbar_group )
8051+ do_colors = TRUE;
8052+ }
8053+ if (is_scrollbar_group && gui .scroll_bg_pixel != i )
8054+ {
80338055 gui .scroll_bg_pixel = i ;
8056+ do_colors = TRUE;
8057+ }
80348058# ifdef FEAT_BEVAL
8035- if (is_tooltip_group )
8059+ if (is_tooltip_group && gui .tooltip_bg_pixel != i )
8060+ {
80368061 gui .tooltip_bg_pixel = i ;
8062+ do_colors = TRUE;
8063+ }
80378064# endif
8038- do_colors = TRUE;
80398065# endif
80408066 }
80418067# endif
@@ -8044,6 +8070,8 @@ do_highlight(
80448070 }
80458071 else if (STRCMP (key , "GUISP" ) == 0 )
80468072 {
8073+ char_u * * namep = & HL_TABLE ()[idx ].sg_gui_sp_name ;
8074+
80478075#if defined(FEAT_GUI ) || defined(FEAT_EVAL )
80488076 if (!init || !(HL_TABLE ()[idx ].sg_set & SG_GUI ))
80498077 {
@@ -8056,11 +8084,14 @@ do_highlight(
80568084 {
80578085 HL_TABLE ()[idx ].sg_gui_sp = i ;
80588086# endif
8059- vim_free (HL_TABLE ()[idx ].sg_gui_sp_name );
8060- if (STRCMP (arg , "NONE" ) != 0 )
8061- HL_TABLE ()[idx ].sg_gui_sp_name = vim_strsave (arg );
8062- else
8063- HL_TABLE ()[idx ].sg_gui_sp_name = NULL ;
8087+ if (* namep == NULL || STRCMP (* namep , arg ) != 0 )
8088+ {
8089+ vim_free (* namep );
8090+ if (STRCMP (arg , "NONE" ) != 0 )
8091+ * namep = vim_strsave (arg );
8092+ else
8093+ * namep = NULL ;
8094+ }
80648095# ifdef FEAT_GUI
80658096 }
80668097# endif
0 commit comments