patch 8.2.4814: possible to leave a popup window with win_gotoid()
Problem: Possible to leave a popup window with win_gotoid().
Solution: Give an error when trying to leave a popup window with
win_gotoid(). (closes #10253)
diff --git a/src/evalwindow.c b/src/evalwindow.c
index 43a6d63..fd62579 100644
--- a/src/evalwindow.c
+++ b/src/evalwindow.c
@@ -817,6 +817,13 @@
return;
}
#endif
+#if defined(FEAT_PROP_POPUP) && defined(FEAT_TERMINAL)
+ if (popup_is_popup(curwin) && curbuf->b_term != NULL)
+ {
+ emsg(_(e_not_allowed_for_terminal_in_popup_window));
+ return;
+ }
+#endif
FOR_ALL_TAB_WINDOWS(tp, wp)
if (wp->w_id == id)
{
diff --git a/src/testdir/test_terminal3.vim b/src/testdir/test_terminal3.vim
index 9b5a02f..b798e9a 100644
--- a/src/testdir/test_terminal3.vim
+++ b/src/testdir/test_terminal3.vim
@@ -528,6 +528,18 @@
exe buf2 .. 'bwipe!'
endfunc
+func Test_escape_popup_terminal()
+ set hidden
+
+ " Cannot escape a terminal popup window using win_gotoid
+ let prev_win = win_getid()
+ eval term_start('sh', #{hidden: 1, term_finish: 'close'})->popup_create({})
+ call assert_fails("call win_gotoid(" .. prev_win .. ")", 'E863:')
+
+ call popup_clear(1)
+ set hidden&
+endfunc
+
func Test_issue_5607()
let wincount = winnr('$')
exe 'terminal' &shell &shellcmdflag 'exit'
diff --git a/src/version.c b/src/version.c
index 7530c1b..c1096e2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4814,
+/**/
4813,
/**/
4812,