]> granicus.if.org Git - vim/commitdiff
patch 8.1.0061: window title is wrong after resetting and setting 'title' v8.1.0061
authorBram Moolenaar <Bram@vim.org>
Sat, 16 Jun 2018 20:58:15 +0000 (22:58 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 16 Jun 2018 20:58:15 +0000 (22:58 +0200)
Problem:    Window title is wrong after resetting and setting 'title'.
Solution:   Move resetting the title into maketitle(). (Jason Franklin)

src/buffer.c
src/option.c
src/version.c

index 68b4a045757480ab231219da3d317d72f163b7f4..254aad461db5a59275e79e99594c0bac5bc19c35 100644 (file)
@@ -38,7 +38,7 @@ static int    buf_same_ino(buf_T *buf, stat_T *stp);
 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;
+                   len += (*mb_tail_off)(p, p + len) + 1;
 #endif
-               i_name += len;
+               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;
 }
index 0200b207c722c0199585f2c6f799005b8c7070cb..23560798a156106e9317cd3f519c4833e9782448 100644 (file)
@@ -3256,9 +3256,6 @@ static char_u *illegal_char(char_u *, int);
 #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)
+    else if ((int *)varp == &p_title || (int *)varp == &p_icon)
     {
-       did_set_title(TRUE);
+       did_set_title();
     }
 #endif
 
index 6406e6cd87223c4d7bf8ab66c9bc08018628fce3..c8c4dd15e1104819e93a772b3b471103cc7cba4f 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    61,
 /**/
     60,
 /**/