]> granicus.if.org Git - vim/commitdiff
patch 8.1.1521: when a popup window is closed the buffer remains v8.1.1521
authorBram Moolenaar <Bram@vim.org>
Wed, 12 Jun 2019 19:06:32 +0000 (21:06 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 12 Jun 2019 19:06:32 +0000 (21:06 +0200)
Problem:    When a popup window is closed the buffer remains.
Solution:   Wipe out the buffer.

src/testdir/test_popupwin.vim
src/version.c
src/window.c

index 06a33d4bad73568ff83799ff1314444feb79cc62..d100dc99388cf1ae61a12695bda48337b2663705 100644 (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})
index 8f3d0864fddf073af737b7ad4eb63eb6d251cd8e..28877cb560d28f47733b7afcc2bc7f09ff3431e7 100644 (file)
@@ -777,6 +777,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1521,
 /**/
     1520,
 /**/
index d293bad44188255948834c2315e75aded8f50c8f..c15a86111b7d730ba245a943d094160514290eba 100644 (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);