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})
}
/*
- * 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.
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
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
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);