0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.1.1399: popup windows not adjusted when switching tabs

Problem:    Popup windows not adjusted when switching tabs.
Solution:   Save and restore first_tab_popupwin. Fix closing a tabpage.
This commit is contained in:
Bram Moolenaar
2019-05-26 14:11:23 +02:00
parent a8c99fb78e
commit ec58384afa
8 changed files with 117 additions and 24 deletions

View File

@@ -177,40 +177,59 @@ f_popup_close(typval_T *argvars, typval_T *rettv UNUSED)
popup_close(nr);
}
/*
* Close a popup window by Window-id.
*/
void
popup_close(int nr)
popup_close(int id)
{
win_T *wp;
tabpage_T *tp;
win_T *prev = NULL;
// go through global popups
for (wp = first_popupwin; wp != NULL; prev = wp, wp = wp->w_next)
if (wp->w_id == nr)
if (wp->w_id == id)
{
if (prev == NULL)
first_popupwin = wp->w_next;
else
prev->w_next = wp->w_next;
break;
win_free_popup(wp);
redraw_all_later(NOT_VALID);
return;
}
if (wp == NULL)
{
prev = NULL;
for (wp = first_tab_popupwin; wp != NULL; prev = wp, wp = wp->w_next)
if (wp->w_id == nr)
{
if (prev == NULL)
first_tab_popupwin = wp->w_next;
else
prev->w_next = wp->w_next;
break;
}
}
if (wp != NULL)
{
win_free_popup(wp);
redraw_all_later(NOT_VALID);
}
// go through tab-local popups
FOR_ALL_TABPAGES(tp)
popup_close_tabpage(tp, id);
}
/*
* Close a popup window with Window-id "id" in tabpage "tp".
*/
void
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)
{
if (prev == NULL)
*root = wp->w_next;
else
prev->w_next = wp->w_next;
win_free_popup(wp);
redraw_all_later(NOT_VALID);
return;
}
}
void