]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.1.1400: using global pointer for tab-local popups is clumsy v8.1.1400
authorBram Moolenaar <Bram@vim.org>
Sun, 26 May 2019 16:48:13 +0000 (18:48 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 26 May 2019 16:48:13 +0000 (18:48 +0200)
Problem:    Using global pointer for tab-local popups is clumsy.
Solution:   Use the pointer in tabpage_T.

src/eval.c
src/globals.h
src/popupwin.c
src/screen.c
src/version.c
src/window.c

index fb417c8b419ab5afb30db176d1d6b6cb889bf7a2..7fbd7702ddd781c0bdbd34e67378cb5935377897 100644 (file)
@@ -5589,12 +5589,8 @@ garbage_collect(int testing)
     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)
+       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,12 +8812,11 @@ find_win_by_nr(
     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)
+       // 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;
index 7d250f443f73f5fbbf7aa65666dc63fb7d69e64f..43ad8e97e32fd345d25b8009560fa49de04876f6 100644 (file)
@@ -582,7 +582,6 @@ EXTERN win_T        *aucmd_win;     /* window used in aucmd_prepbuf() */
 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
 
index 294f3b1d6a967f2c32a30101b22811602030bbfe..5439c64b4eba4424e8eccb0441010376e43a5c5f 100644 (file)
@@ -85,8 +85,8 @@ f_popup_create(typval_T *argvars, typval_T *rettv)
     if (nr == 0)
     {
        // popup on current tab
-       wp->w_next = first_tab_popupwin;
-       first_tab_popupwin = wp;
+       wp->w_next = curtab->tp_first_popupwin;
+       curtab->tp_first_popupwin = wp;
     }
     else if (nr < 0)
     {
@@ -212,13 +212,9 @@ popup_close(int id)
 popup_close_tabpage(tabpage_T *tp, int id)
 {
     win_T      *wp;
-    win_T      **root;
+    win_T      **root = &tp->tp_first_popupwin;
     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)
        {
@@ -237,8 +233,8 @@ close_all_popups(void)
 {
     while (first_popupwin != NULL)
        popup_close(first_popupwin->w_id);
-    while (first_tab_popupwin != NULL)
-       popup_close(first_tab_popupwin->w_id);
+    while (curtab->tp_first_popupwin != NULL)
+       popup_close(curtab->tp_first_popupwin->w_id);
 }
 
     void
index 00894cead05f3a14757dabf17b224f5f631f878b..30e1bb21ab3ae1626ccd4e61b13fbcc97ec8f99c 100644 (file)
@@ -610,7 +610,7 @@ update_screen(int type_arg)
     }
 #ifdef FEAT_TEXT_PROP
     // TODO: avoid redrawing everything when there is a popup window.
-    if (first_popupwin != NULL || first_tab_popupwin != NULL)
+    if (first_popupwin != NULL || curtab->tp_first_popupwin != NULL)
        type = NOT_VALID;
 #endif
 
@@ -1000,7 +1000,7 @@ update_popups(void)
     // 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)
+    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,7 +1018,7 @@ update_popups(void)
                lowest_zindex = wp->w_zindex;
                lowest_wp = wp;
            }
-       for (wp = first_tab_popupwin; wp != NULL; wp = wp->w_next)
+       for (wp = curtab->tp_first_popupwin; wp != NULL; wp = wp->w_next)
            if ((wp->w_valid & VALID_POPUP) == 0
                                               && wp->w_zindex < lowest_zindex)
            {
index 78a932e1686db664764f4a77adbeaf05254a09d6..4f876639c1ded47775dae96b3d2f59373aa32226 100644 (file)
@@ -767,6 +767,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1400,
 /**/
     1399,
 /**/
index ffff75647eb9765c4a2047bea022907990c8975f..bc8dac0b47efc4f0d0b6bd3071b0b769c5e8e86d 100644 (file)
@@ -1371,7 +1371,7 @@ win_valid_popup(win_T *win UNUSED)
     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)
+    for (wp = curtab->tp_first_popupwin; wp != NULL; wp = wp->w_next)
        if (wp == win)
            return TRUE;
 #endif
@@ -3673,13 +3673,8 @@ free_tabpage(tabpage_T *tp)
     {
        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);
-       }
+       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,10 +3968,6 @@ leave_tabpage(
     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;
@@ -4004,9 +3995,6 @@ enter_tabpage(
     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.
@@ -6513,15 +6501,9 @@ switch_win(
        {
            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);
@@ -6550,15 +6532,9 @@ restore_win(
        {
            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);