summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLemonBoy <thatlemon@gmail.com>2022-04-23 14:07:56 +0100
committerBram Moolenaar <Bram@vim.org>2022-04-23 14:07:56 +0100
commit4a392d244018fadda375a490f4f4b921023248b9 (patch)
tree3387e57ffd7618b49c3b88313b6c5e98d7a91cee
parent2c40707baa13a53cac4137ffb8b2ac67f50cea63 (diff)
patch 8.2.4814: possible to leave a popup window with win_gotoid()v8.2.4814
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)
-rw-r--r--src/evalwindow.c7
-rw-r--r--src/testdir/test_terminal3.vim12
-rw-r--r--src/version.c2
3 files changed, 21 insertions, 0 deletions
diff --git a/src/evalwindow.c b/src/evalwindow.c
index 43a6d63ef6..fd62579cd1 100644
--- a/src/evalwindow.c
+++ b/src/evalwindow.c
@@ -817,6 +817,13 @@ f_win_gotoid(typval_T *argvars, typval_T *rettv)
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 9b5a02f527..b798e9a0b9 100644
--- a/src/testdir/test_terminal3.vim
+++ b/src/testdir/test_terminal3.vim
@@ -528,6 +528,18 @@ func Test_double_popup_terminal()
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 7530c1b54b..c1096e2f58 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4814,
+/**/
4813,
/**/
4812,