patch 8.2.1997: window changes when using bufload() while in a terminal popup
Problem: Window changes when using bufload() while in a terminal popup.
Solution: When searching for a window by ID also find a popup window.
(closes #7307)
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index 7d6bdbc..7351647 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -1237,6 +1237,23 @@
unlet s:winid
endfunc
+func Test_terminal_popup_bufload()
+ let termbuf = term_start(&shell, #{hidden: v:true, term_finish: 'close'})
+ let winid = popup_create(termbuf, {})
+ sleep 50m
+
+ let newbuf = bufadd('')
+ call bufload(newbuf)
+ call setbufline(newbuf, 1, 'foobar')
+
+ " must not have switched to another window
+ call assert_equal(winid, win_getid())
+
+ call feedkeys("exit\<CR>", 'xt')
+ sleep 50m
+ exe 'bwipe! ' .. newbuf
+endfunc
+
func Test_terminal_popup_insert_cmd()
CheckUnix
diff --git a/src/version.c b/src/version.c
index 7aadd45..0e9973e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1997,
+/**/
1996,
/**/
1995,
diff --git a/src/window.c b/src/window.c
index 501ea84..1134d0a6 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1462,6 +1462,7 @@
/*
* Find window "id" in the current tab page.
+ * Also find popup windows.
* Return NULL if not found.
*/
win_T *
@@ -1472,6 +1473,14 @@
FOR_ALL_WINDOWS(wp)
if (wp->w_id == id)
return wp;
+#ifdef FEAT_PROP_POPUP
+ FOR_ALL_POPUPWINS(wp)
+ if (wp->w_id == id)
+ return wp;
+ FOR_ALL_POPUPWINS_IN_TAB(curtab, wp)
+ if (wp->w_id == id)
+ return wp;
+#endif
return NULL;
}