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.