Mercurial > vim
changeset 17043:d99805d25b42 v8.1.1521
patch 8.1.1521: when a popup window is closed the buffer remains
commit https://github.com/vim/vim/commit/7c7f01e2b260c75d9996ca9ab621119eafe13a63
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Jun 12 21:06:32 2019 +0200
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.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 12 Jun 2019 21:15:07 +0200 |
parents | ea951d5610a5 |
children | 687ec0a10570 |
files | src/testdir/test_popupwin.vim src/version.c src/window.c |
diffstat | 3 files changed, 13 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -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})
--- a/src/version.c +++ b/src/version.c @@ -778,6 +778,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1521, +/**/ 1520, /**/ 1519,
--- a/src/window.c +++ b/src/window.c @@ -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_bu 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);