Patch 8.1.0061
Problem:    Window title is wrong after resetting and setting 'title'.
Solution:   Move resetting the title into maketitle(). (Jason Franklin)
Files:      src/option.c, src/buffer.c


*** ../vim-8.1.0060/src/option.c        2018-06-12 16:49:26.366028607 +0200
--- src/option.c        2018-06-16 22:36:07.814142229 +0200
***************
*** 3256,3264 ****
  #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);
--- 3256,3261 ----
***************
*** 5374,5400 ****
   * the old value back.
   */
      static void
! did_set_title(
!     int           icon)           /* Did set icon instead of title */
  {
      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
  
--- 5371,5384 ----
   * the old value back.
   */
      static void
! did_set_title(void)
  {
      if (starting != NO_SCREEN
  #ifdef FEAT_GUI
            && !gui.starting
  #endif
                                )
        maketitle();
  }
  #endif
  
***************
*** 6949,6956 ****
        else
            stl_syntax &= ~flagval;
  # endif
!       did_set_title(varp == &p_iconstring);
! 
      }
  #endif
  
--- 6933,6939 ----
        else
            stl_syntax &= ~flagval;
  # endif
!       did_set_title();
      }
  #endif
  
***************
*** 8401,8414 ****
  
  #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);
      }
  #endif
  
--- 8384,8392 ----
  
  #ifdef FEAT_TITLE
      /* when 'title' changed, may need to change the title; same for 'icon' */
!     else if ((int *)varp == &p_title || (int *)varp == &p_icon)
      {
!       did_set_title();
      }
  #endif
  
*** ../vim-8.1.0060/src/buffer.c        2018-06-06 18:02:31.402773772 +0200
--- src/buffer.c        2018-06-16 22:57:08.067368623 +0200
***************
*** 38,44 ****
  static int    otherfile_buf(buf_T *buf, char_u *ffname);
  #endif
  #ifdef FEAT_TITLE
! static int    ti_change(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 *);
--- 38,44 ----
  static int    otherfile_buf(buf_T *buf, char_u *ffname);
  #endif
  #ifdef FEAT_TITLE
! 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,3564 ****
  }
  
  #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;
  
      void
  maketitle(void)
  {
      char_u    *p;
!     char_u    *t_str = NULL;
!     char_u    *i_name;
!     char_u    *i_str = NULL;
      int               maxlen = 0;
      int               len;
      int               mustset;
--- 3545,3562 ----
  }
  
  #if defined(FEAT_TITLE) || defined(PROTO)
  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    *title_str = NULL;
!     char_u    *icon_str = NULL;
      int               maxlen = 0;
      int               len;
      int               mustset;
***************
*** 3574,3580 ****
  
      need_maketitle = FALSE;
      if (!p_title && !p_icon && lasttitle == NULL && lasticon == NULL)
!       return;
  
      if (p_title)
      {
--- 3572,3578 ----
  
      need_maketitle = FALSE;
      if (!p_title && !p_icon && lasttitle == NULL && lasticon == NULL)
!       return;  // nothing to do
  
      if (p_title)
      {
***************
*** 3585,3591 ****
                maxlen = 10;
        }
  
!       t_str = buf;
        if (*p_titlestring != NUL)
        {
  #ifdef FEAT_STL_OPT
--- 3583,3589 ----
                maxlen = 10;
        }
  
!       title_str = buf;
        if (*p_titlestring != NUL)
        {
  #ifdef FEAT_STL_OPT
***************
*** 3598,3604 ****
                use_sandbox = was_set_insecurely((char_u *)"titlestring", 0);
  # endif
                called_emsg = FALSE;
!               build_stl_str_hl(curwin, t_str, sizeof(buf),
                                              p_titlestring, use_sandbox,
                                              0, maxlen, NULL, NULL);
                if (called_emsg)
--- 3596,3602 ----
                use_sandbox = was_set_insecurely((char_u *)"titlestring", 0);
  # endif
                called_emsg = FALSE;
!               build_stl_str_hl(curwin, title_str, sizeof(buf),
                                              p_titlestring, use_sandbox,
                                              0, maxlen, NULL, NULL);
                if (called_emsg)
***************
*** 3608,3614 ****
            }
            else
  #endif
!               t_str = p_titlestring;
        }
        else
        {
--- 3606,3612 ----
            }
            else
  #endif
!               title_str = p_titlestring;
        }
        else
        {
***************
*** 3714,3724 ****
            }
        }
      }
!     mustset = ti_change(t_str, &lasttitle);
  
      if (p_icon)
      {
!       i_str = buf;
        if (*p_iconstring != NUL)
        {
  #ifdef FEAT_STL_OPT
--- 3712,3722 ----
            }
        }
      }
!     mustset = value_changed(title_str, &lasttitle);
  
      if (p_icon)
      {
!       icon_str = buf;
        if (*p_iconstring != NUL)
        {
  #ifdef FEAT_STL_OPT
***************
*** 3731,3737 ****
                use_sandbox = was_set_insecurely((char_u *)"iconstring", 0);
  # endif
                called_emsg = FALSE;
!               build_stl_str_hl(curwin, i_str, sizeof(buf),
                                                    p_iconstring, use_sandbox,
                                                    0, 0, NULL, NULL);
                if (called_emsg)
--- 3729,3735 ----
                use_sandbox = was_set_insecurely((char_u *)"iconstring", 0);
  # endif
                called_emsg = FALSE;
!               build_stl_str_hl(curwin, icon_str, sizeof(buf),
                                                    p_iconstring, use_sandbox,
                                                    0, 0, NULL, NULL);
                if (called_emsg)
***************
*** 3741,3772 ****
            }
            else
  #endif
!               i_str = p_iconstring;
        }
        else
        {
            if (buf_spname(curbuf) != NULL)
!               i_name = buf_spname(curbuf);
            else                    /* use file name only in icon */
!               i_name = gettail(curbuf->b_ffname);
!           *i_str = NUL;
            /* Truncate name at 100 bytes. */
!           len = (int)STRLEN(i_name);
            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;
            }
!           STRCPY(i_str, i_name);
!           trans_characters(i_str, IOSIZE);
        }
      }
  
!     mustset |= ti_change(i_str, &lasticon);
  
      if (mustset)
        resettitle();
--- 3739,3770 ----
            }
            else
  #endif
!               icon_str = p_iconstring;
        }
        else
        {
            if (buf_spname(curbuf) != NULL)
!               p = buf_spname(curbuf);
            else                    /* use file name only in icon */
!               p = gettail(curbuf->b_ffname);
!           *icon_str = NUL;
            /* Truncate name at 100 bytes. */
!           len = (int)STRLEN(p);
            if (len > 100)
            {
                len -= 100;
  #ifdef FEAT_MBYTE
                if (has_mbyte)
!                   len += (*mb_tail_off)(p, p + len) + 1;
  #endif
!               p += len;
            }
!           STRCPY(icon_str, p);
!           trans_characters(icon_str, IOSIZE);
        }
      }
  
!     mustset |= value_changed(icon_str, &lasticon);
  
      if (mustset)
        resettitle();
***************
*** 3775,3794 ****
  /*
   * Used for title and icon: Check if "str" differs from "*last".  Set "*last"
   * from "str" if it does.
!  * Return TRUE when "*last" changed.
   */
      static int
! ti_change(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;
        else
            *last = vim_strsave(str);
!       return TRUE;
      }
      return FALSE;
  }
--- 3773,3797 ----
  /*
   * Used for title and icon: Check if "str" differs from "*last".  Set "*last"
   * from "str" if it does.
!  * Return TRUE if resettitle() is to be called.
   */
      static int
! 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 FALSE;
  }
*** ../vim-8.1.0060/src/version.c       2018-06-16 22:16:43.232576946 +0200
--- src/version.c       2018-06-16 22:48:20.082215622 +0200
***************
*** 763,764 ****
--- 763,766 ----
  {   /* Add new patch number below this line */
+ /**/
+     61,
  /**/

-- 
"I don’t know how to make a screenshot" - Richard Stallman, July 2002
(when asked to send a screenshot of his desktop for unix.se)

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui