0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.1.1521: when a popup window is closed the buffer remains

Problem:    When a popup window is closed the buffer remains.
Solution:   Wipe out the buffer.
This commit is contained in:
Bram Moolenaar 2019-06-12 21:06:32 +02:00
parent 451d4b5b7c
commit 7c7f01e2b2
3 changed files with 13 additions and 6 deletions

View File

@ -272,12 +272,17 @@ endfunc
func Test_popup_in_tab()
" default popup is local to tab, not visible when in other tab
let winid = popup_create("text", {})
let bufnr = winbufnr(winid)
call assert_equal(1, popup_getpos(winid).visible)
tabnew
call assert_equal(0, popup_getpos(winid).visible)
quit
call assert_equal(1, popup_getpos(winid).visible)
call assert_equal(1, bufexists(bufnr))
call popup_clear()
" buffer is gone now
call assert_equal(0, bufexists(bufnr))
" global popup is visible in any tab
let winid = popup_create("text", {'tab': -1})

View File

@ -777,6 +777,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1521,
/**/
1520,
/**/

View File

@ -2324,12 +2324,13 @@ close_last_window_tabpage(
}
/*
* Close the buffer of "win" and unload it if "free_buf" is TRUE.
* Close the buffer of "win" and unload it if "action" is DOBUF_UNLOAD.
* "action" can also be zero (do nothing) or DOBUF_WIPE.
* "abort_if_last" is passed to close_buffer(): abort closing if all other
* windows are closed.
*/
static void
win_close_buffer(win_T *win, int free_buf, int abort_if_last)
win_close_buffer(win_T *win, int action, int abort_if_last)
{
#ifdef FEAT_SYN_HL
// Free independent synblock before the buffer is freed.
@ -2350,8 +2351,7 @@ win_close_buffer(win_T *win, int free_buf, int abort_if_last)
set_bufref(&bufref, curbuf);
win->w_closing = TRUE;
close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0,
abort_if_last);
close_buffer(win, win->w_buffer, action, abort_if_last);
if (win_valid_any_tab(win))
win->w_closing = FALSE;
// Make sure curbuf is valid. It can become invalid if 'bufhidden' is
@ -2462,7 +2462,7 @@ win_close(win_T *win, int free_buf)
out_flush();
#endif
win_close_buffer(win, free_buf, TRUE);
win_close_buffer(win, free_buf ? DOBUF_UNLOAD : 0, TRUE);
if (only_one_window() && win_valid(win) && win->w_buffer == NULL
&& (last_window() || curtab != prev_curtab
@ -4894,7 +4894,7 @@ win_unlisted(win_T *wp)
void
win_free_popup(win_T *win)
{
win_close_buffer(win, TRUE, FALSE);
win_close_buffer(win, DOBUF_WIPE, FALSE);
# if defined(FEAT_TIMERS)
if (win->w_popup_timer != NULL)
stop_timer(win->w_popup_timer);