patch 8.1.1433: win_execute() may leave popup window focused
Problem: Win_execute() may leave popup window focused, eventually leading
to a crash. (Bjorn Linse)
Solution: When previous window was closed, go to the first window.
diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim
index 29d4c15..d0d27b5 100644
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -105,6 +105,14 @@
call delete('XtestPopup')
endfunc
+func Test_win_execute_closing_curwin()
+ split
+ let winid = popup_create('some text', {})
+ call win_execute(winid, winnr() .. "close")
+ call assert_equal(1, winnr())
+ popupclear
+endfunc
+
func Test_popup_with_wrap()
if !CanRunVimInTerminal()
return
diff --git a/src/version.c b/src/version.c
index 6bc3d64..b3f7ee9 100644
--- a/src/version.c
+++ b/src/version.c
@@ -768,6 +768,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1433,
+/**/
1432,
/**/
1431,
diff --git a/src/window.c b/src/window.c
index 07c8780..e73a9f4 100644
--- a/src/window.c
+++ b/src/window.c
@@ -6573,6 +6573,12 @@
curwin = save_curwin;
curbuf = curwin->w_buffer;
}
+#ifdef FEAT_TEXT_PROP
+ else if (bt_popup(curwin->w_buffer))
+ // original window was closed and now we're in a popup window: Go
+ // to the first valid window.
+ win_goto(firstwin);
+#endif
}
/*