changeset 14087:1d25a3e8e03c v8.1.0061

patch 8.1.0061: window title is wrong after resetting and setting 'title' commit https://github.com/vim/vim/commit/84a9308511871d9ff94c91a1c6badb92300ded98 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jun 16 22:58:15 2018 +0200 patch 8.1.0061: window title is wrong after resetting and setting 'title' Problem: Window title is wrong after resetting and setting 'title'. Solution: Move resetting the title into maketitle(). (Jason Franklin)
author Christian Brabandt <cb@256bit.org>
date Sat, 16 Jun 2018 23:00:08 +0200
parents 56f44a087b09
children 79f0d5e474b1
files src/buffer.c src/option.c src/version.c
diffstat 3 files changed, 39 insertions(+), 56 deletions(-) [+]
line wrap: on
line diff
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -38,7 +38,7 @@ static int	buf_same_ino(buf_T *buf, stat
 static int	otherfile_buf(buf_T *buf, char_u *ffname);
 #endif
 #ifdef FEAT_TITLE
-static int	ti_change(char_u *str, char_u **last);
+static int	value_changed(char_u *str, char_u **last);
 #endif
 static int	append_arg_number(win_T *wp, char_u *buf, int buflen, int add_file);
 static void	free_buffer(buf_T *);
@@ -3545,20 +3545,18 @@ col_print(
 }
 
 #if defined(FEAT_TITLE) || defined(PROTO)
-/*
- * put file name in title bar of window and in icon title
- */
-
 static char_u *lasttitle = NULL;
 static char_u *lasticon = NULL;
 
+/*
+ * Put the file name in the title bar and icon of the window.
+ */
     void
 maketitle(void)
 {
     char_u	*p;
-    char_u	*t_str = NULL;
-    char_u	*i_name;
-    char_u	*i_str = NULL;
+    char_u	*title_str = NULL;
+    char_u	*icon_str = NULL;
     int		maxlen = 0;
     int		len;
     int		mustset;
@@ -3574,7 +3572,7 @@ maketitle(void)
 
     need_maketitle = FALSE;
     if (!p_title && !p_icon && lasttitle == NULL && lasticon == NULL)
-	return;
+	return;  // nothing to do
 
     if (p_title)
     {
@@ -3585,7 +3583,7 @@ maketitle(void)
 		maxlen = 10;
 	}
 
-	t_str = buf;
+	title_str = buf;
 	if (*p_titlestring != NUL)
 	{
 #ifdef FEAT_STL_OPT
@@ -3598,7 +3596,7 @@ maketitle(void)
 		use_sandbox = was_set_insecurely((char_u *)"titlestring", 0);
 # endif
 		called_emsg = FALSE;
-		build_stl_str_hl(curwin, t_str, sizeof(buf),
+		build_stl_str_hl(curwin, title_str, sizeof(buf),
 					      p_titlestring, use_sandbox,
 					      0, maxlen, NULL, NULL);
 		if (called_emsg)
@@ -3608,7 +3606,7 @@ maketitle(void)
 	    }
 	    else
 #endif
-		t_str = p_titlestring;
+		title_str = p_titlestring;
 	}
 	else
 	{
@@ -3714,11 +3712,11 @@ maketitle(void)
 	    }
 	}
     }
-    mustset = ti_change(t_str, &lasttitle);
+    mustset = value_changed(title_str, &lasttitle);
 
     if (p_icon)
     {
-	i_str = buf;
+	icon_str = buf;
 	if (*p_iconstring != NUL)
 	{
 #ifdef FEAT_STL_OPT
@@ -3731,7 +3729,7 @@ maketitle(void)
 		use_sandbox = was_set_insecurely((char_u *)"iconstring", 0);
 # endif
 		called_emsg = FALSE;
-		build_stl_str_hl(curwin, i_str, sizeof(buf),
+		build_stl_str_hl(curwin, icon_str, sizeof(buf),
 						    p_iconstring, use_sandbox,
 						    0, 0, NULL, NULL);
 		if (called_emsg)
@@ -3741,32 +3739,32 @@ maketitle(void)
 	    }
 	    else
 #endif
-		i_str = p_iconstring;
+		icon_str = p_iconstring;
 	}
 	else
 	{
 	    if (buf_spname(curbuf) != NULL)
-		i_name = buf_spname(curbuf);
+		p = buf_spname(curbuf);
 	    else		    /* use file name only in icon */
-		i_name = gettail(curbuf->b_ffname);
-	    *i_str = NUL;
+		p = gettail(curbuf->b_ffname);
+	    *icon_str = NUL;
 	    /* Truncate name at 100 bytes. */
-	    len = (int)STRLEN(i_name);
+	    len = (int)STRLEN(p);
 	    if (len > 100)
 	    {
 		len -= 100;
 #ifdef FEAT_MBYTE
 		if (has_mbyte)
-		    len += (*mb_tail_off)(i_name, i_name + len) + 1;
-#endif
-		i_name += len;
+		    len += (*mb_tail_off)(p, p + len) + 1;
+#endif
+		p += len;
 	    }
-	    STRCPY(i_str, i_name);
-	    trans_characters(i_str, IOSIZE);
+	    STRCPY(icon_str, p);
+	    trans_characters(icon_str, IOSIZE);
 	}
     }
 
-    mustset |= ti_change(i_str, &lasticon);
+    mustset |= value_changed(icon_str, &lasticon);
 
     if (mustset)
 	resettitle();
@@ -3775,20 +3773,25 @@ maketitle(void)
 /*
  * Used for title and icon: Check if "str" differs from "*last".  Set "*last"
  * from "str" if it does.
- * Return TRUE when "*last" changed.
+ * Return TRUE if resettitle() is to be called.
  */
     static int
-ti_change(char_u *str, char_u **last)
+value_changed(char_u *str, char_u **last)
 {
     if ((str == NULL) != (*last == NULL)
 	    || (str != NULL && *last != NULL && STRCMP(str, *last) != 0))
     {
 	vim_free(*last);
 	if (str == NULL)
+	{
 	    *last = NULL;
+	    mch_restore_title(last == &lasttitle ? 1 : 2);
+	}
 	else
+	{
 	    *last = vim_strsave(str);
-	return TRUE;
+	    return TRUE;
+	}
     }
     return FALSE;
 }
--- a/src/option.c
+++ b/src/option.c
@@ -3256,9 +3256,6 @@ static char_u *illegal_char(char_u *, in
 #ifdef FEAT_CMDWIN
 static char_u *check_cedit(void);
 #endif
-#ifdef FEAT_TITLE
-static void did_set_title(int icon);
-#endif
 static char_u *option_expand(int opt_idx, char_u *val);
 static void didset_options(void);
 static void didset_options2(void);
@@ -5374,27 +5371,14 @@ check_cedit(void)
  * the old value back.
  */
     static void
-did_set_title(
-    int	    icon)	    /* Did set icon instead of title */
+did_set_title(void)
 {
     if (starting != NO_SCREEN
 #ifdef FEAT_GUI
 	    && !gui.starting
 #endif
 				)
-    {
 	maketitle();
-	if (icon)
-	{
-	    if (!p_icon)
-		mch_restore_title(2);
-	}
-	else
-	{
-	    if (!p_title)
-		mch_restore_title(1);
-	}
-    }
 }
 #endif
 
@@ -6949,8 +6933,7 @@ did_set_string_option(
 	else
 	    stl_syntax &= ~flagval;
 # endif
-	did_set_title(varp == &p_iconstring);
-
+	did_set_title();
     }
 #endif
 
@@ -8401,14 +8384,9 @@ set_bool_option(
 
 #ifdef FEAT_TITLE
     /* when 'title' changed, may need to change the title; same for 'icon' */
-    else if ((int *)varp == &p_title)
-    {
-	did_set_title(FALSE);
-    }
-
-    else if ((int *)varp == &p_icon)
-    {
-	did_set_title(TRUE);
+    else if ((int *)varp == &p_title || (int *)varp == &p_icon)
+    {
+	did_set_title();
     }
 #endif
 
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    61,
+/**/
     60,
 /**/
     59,