Patch 8.1.1400
Problem:    Using global pointer for tab-local popups is clumsy.
Solution:   Use the pointer in tabpage_T.
Files:      src/popupwin.c, src/globals.h, src/eval.c, src/screen.c,
            src/window.c


*** ../vim-8.1.1399/src/popupwin.c      2019-05-26 14:10:59.909979018 +0200
--- src/popupwin.c      2019-05-26 18:35:27.278514988 +0200
***************
*** 85,92 ****
      if (nr == 0)
      {
        // popup on current tab
!       wp->w_next = first_tab_popupwin;
!       first_tab_popupwin = wp;
      }
      else if (nr < 0)
      {
--- 85,92 ----
      if (nr == 0)
      {
        // popup on current tab
!       wp->w_next = curtab->tp_first_popupwin;
!       curtab->tp_first_popupwin = wp;
      }
      else if (nr < 0)
      {
***************
*** 212,224 ****
  popup_close_tabpage(tabpage_T *tp, int id)
  {
      win_T     *wp;
!     win_T     **root;
      win_T     *prev = NULL;
  
-     if (tp == curtab)
-       root = &first_tab_popupwin;
-     else
-       root = &tp->tp_first_popupwin;
      for (wp = *root; wp != NULL; prev = wp, wp = wp->w_next)
        if (wp->w_id == id)
        {
--- 212,220 ----
  popup_close_tabpage(tabpage_T *tp, int id)
  {
      win_T     *wp;
!     win_T     **root = &tp->tp_first_popupwin;
      win_T     *prev = NULL;
  
      for (wp = *root; wp != NULL; prev = wp, wp = wp->w_next)
        if (wp->w_id == id)
        {
***************
*** 237,244 ****
  {
      while (first_popupwin != NULL)
        popup_close(first_popupwin->w_id);
!     while (first_tab_popupwin != NULL)
!       popup_close(first_tab_popupwin->w_id);
  }
  
      void
--- 233,240 ----
  {
      while (first_popupwin != NULL)
        popup_close(first_popupwin->w_id);
!     while (curtab->tp_first_popupwin != NULL)
!       popup_close(curtab->tp_first_popupwin->w_id);
  }
  
      void
*** ../vim-8.1.1399/src/globals.h       2019-05-25 19:51:03.776408456 +0200
--- src/globals.h       2019-05-26 18:40:51.312802393 +0200
***************
*** 582,588 ****
  EXTERN int    aucmd_win_used INIT(= FALSE);   /* aucmd_win is being used */
  
  #ifdef FEAT_TEXT_PROP
- EXTERN win_T    *first_tab_popupwin;  // first popup window local to tab page
  EXTERN win_T    *first_popupwin;      // first global popup window
  #endif
  
--- 582,587 ----
*** ../vim-8.1.1399/src/eval.c  2019-05-25 19:51:03.776408456 +0200
--- src/eval.c  2019-05-26 18:37:25.693888227 +0200
***************
*** 5589,5600 ****
      for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
        abort = abort || set_ref_in_item(&wp->w_winvar.di_tv, copyID,
                                                                  NULL, NULL);
-     for (wp = first_tab_popupwin; wp != NULL; wp = wp->w_next)
-       abort = abort || set_ref_in_item(&wp->w_winvar.di_tv, copyID,
-                                                                 NULL, NULL);
      FOR_ALL_TABPAGES(tp)
!       if (tp != curtab)
!           for (wp = tp->tp_first_popupwin; wp != NULL; wp = wp->w_next)
                abort = abort || set_ref_in_item(&wp->w_winvar.di_tv, copyID,
                                                                  NULL, NULL);
  #endif
--- 5589,5596 ----
      for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
        abort = abort || set_ref_in_item(&wp->w_winvar.di_tv, copyID,
                                                                  NULL, NULL);
      FOR_ALL_TABPAGES(tp)
!       for (wp = tp->tp_first_popupwin; wp != NULL; wp = wp->w_next)
                abort = abort || set_ref_in_item(&wp->w_winvar.di_tv, copyID,
                                                                  NULL, NULL);
  #endif
***************
*** 8816,8827 ****
      if (nr >= LOWEST_WIN_ID)
      {
  #ifdef FEAT_TEXT_PROP
!       // popup windows are in a separate list
!       for (wp = (tp == NULL || tp == curtab)
!               ? first_tab_popupwin : tp->tp_first_popupwin;
!                                                  wp != NULL; wp = wp->w_next)
            if (wp->w_id == nr)
                return wp;
        for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
            if (wp->w_id == nr)
                return wp;
--- 8812,8822 ----
      if (nr >= LOWEST_WIN_ID)
      {
  #ifdef FEAT_TEXT_PROP
!       // check tab-local popup windows
!       for (wp = tp->tp_first_popupwin; wp != NULL; wp = wp->w_next)
            if (wp->w_id == nr)
                return wp;
+       // check global popup windows
        for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
            if (wp->w_id == nr)
                return wp;
*** ../vim-8.1.1399/src/screen.c        2019-05-25 22:56:46.679669071 +0200
--- src/screen.c        2019-05-26 18:38:53.905422054 +0200
***************
*** 610,616 ****
      }
  #ifdef FEAT_TEXT_PROP
      // TODO: avoid redrawing everything when there is a popup window.
!     if (first_popupwin != NULL || first_tab_popupwin != NULL)
        type = NOT_VALID;
  #endif
  
--- 610,616 ----
      }
  #ifdef FEAT_TEXT_PROP
      // TODO: avoid redrawing everything when there is a popup window.
!     if (first_popupwin != NULL || curtab->tp_first_popupwin != NULL)
        type = NOT_VALID;
  #endif
  
***************
*** 1000,1006 ****
      // Reset all the VALID_POPUP flags.
      for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
        wp->w_valid &= ~VALID_POPUP;
!     for (wp = first_tab_popupwin; wp != NULL; wp = wp->w_next)
        wp->w_valid &= ~VALID_POPUP;
  
      // TODO: don't redraw every popup every time.
--- 1000,1006 ----
      // Reset all the VALID_POPUP flags.
      for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
        wp->w_valid &= ~VALID_POPUP;
!     for (wp = curtab->tp_first_popupwin; wp != NULL; wp = wp->w_next)
        wp->w_valid &= ~VALID_POPUP;
  
      // TODO: don't redraw every popup every time.
***************
*** 1018,1024 ****
                lowest_zindex = wp->w_zindex;
                lowest_wp = wp;
            }
!       for (wp = first_tab_popupwin; wp != NULL; wp = wp->w_next)
            if ((wp->w_valid & VALID_POPUP) == 0
                                               && wp->w_zindex < lowest_zindex)
            {
--- 1018,1024 ----
                lowest_zindex = wp->w_zindex;
                lowest_wp = wp;
            }
!       for (wp = curtab->tp_first_popupwin; wp != NULL; wp = wp->w_next)
            if ((wp->w_valid & VALID_POPUP) == 0
                                               && wp->w_zindex < lowest_zindex)
            {
*** ../vim-8.1.1399/src/window.c        2019-05-26 14:10:59.909979018 +0200
--- src/window.c        2019-05-26 18:40:46.224829227 +0200
***************
*** 1371,1377 ****
      for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
        if (wp == win)
            return TRUE;
!     for (wp = first_tab_popupwin; wp != NULL; wp = wp->w_next)
        if (wp == win)
            return TRUE;
  #endif
--- 1371,1377 ----
      for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
        if (wp == win)
            return TRUE;
!     for (wp = curtab->tp_first_popupwin; wp != NULL; wp = wp->w_next)
        if (wp == win)
            return TRUE;
  #endif
***************
*** 3673,3685 ****
      {
        win_T *wp;
  
!       for (;;)
!       {
!           wp = tp == curtab ? first_tab_popupwin : tp->tp_first_popupwin;
!           if (wp == NULL)
!               break;
!           popup_close_tabpage(tp, wp->w_id);
!       }
      }
  #endif
      for (idx = 0; idx < SNAP_COUNT; ++idx)
--- 3673,3680 ----
      {
        win_T *wp;
  
!       while (tp->tp_first_popupwin != NULL)
!           popup_close_tabpage(tp, tp->tp_first_popupwin->w_id);
      }
  #endif
      for (idx = 0; idx < SNAP_COUNT; ++idx)
***************
*** 3973,3982 ****
      tp->tp_prevwin = prevwin;
      tp->tp_firstwin = firstwin;
      tp->tp_lastwin = lastwin;
- #ifdef FEAT_TEXT_PROP
-     tp->tp_first_popupwin = first_tab_popupwin;
-     first_tab_popupwin = NULL;
- #endif
      tp->tp_old_Rows = Rows;
      tp->tp_old_Columns = Columns;
      firstwin = NULL;
--- 3968,3973 ----
***************
*** 4004,4012 ****
      firstwin = tp->tp_firstwin;
      lastwin = tp->tp_lastwin;
      topframe = tp->tp_topframe;
- #ifdef FEAT_TEXT_PROP
-     first_tab_popupwin = tp->tp_first_popupwin;
- #endif
  
      /* We would like doing the TabEnter event first, but we don't have a
       * valid current window yet, which may break some commands.
--- 3995,4000 ----
***************
*** 6513,6527 ****
        {
            curtab->tp_firstwin = firstwin;
            curtab->tp_lastwin = lastwin;
- #ifdef FEAT_TEXT_PROP
-           curtab->tp_first_popupwin = first_tab_popupwin ;
- #endif
            curtab = tp;
            firstwin = curtab->tp_firstwin;
            lastwin = curtab->tp_lastwin;
- #ifdef FEAT_TEXT_PROP
-           first_tab_popupwin = curtab->tp_first_popupwin;
- #endif
        }
        else
            goto_tabpage_tp(tp, FALSE, FALSE);
--- 6501,6509 ----
***************
*** 6550,6564 ****
        {
            curtab->tp_firstwin = firstwin;
            curtab->tp_lastwin = lastwin;
- #ifdef FEAT_TEXT_PROP
-           curtab->tp_first_popupwin = first_tab_popupwin ;
- #endif
            curtab = save_curtab;
            firstwin = curtab->tp_firstwin;
            lastwin = curtab->tp_lastwin;
- #ifdef FEAT_TEXT_PROP
-           first_tab_popupwin = curtab->tp_first_popupwin;
- #endif
        }
        else
            goto_tabpage_tp(save_curtab, FALSE, FALSE);
--- 6532,6540 ----
*** ../vim-8.1.1399/src/version.c       2019-05-26 14:10:59.909979018 +0200
--- src/version.c       2019-05-26 18:47:58.438593632 +0200
***************
*** 769,770 ****
--- 769,772 ----
  {   /* Add new patch number below this line */
+ /**/
+     1400,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
30. Even though you died last week, you've managed to retain OPS on your
    favorite IRC channel.

 /// 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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/201905261648.x4QGmYQQ021249%40masaka.moolenaar.net.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui