]> granicus.if.org Git - vim/commitdiff
patch 8.2.0214: a popup window with a terminal can be made hidden v8.2.0214
authorBram Moolenaar <Bram@vim.org>
Wed, 5 Feb 2020 20:07:18 +0000 (21:07 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 5 Feb 2020 20:07:18 +0000 (21:07 +0100)
Problem:    A popup window with a terminal can be made hidden.
Solution:   Disallow hiding a terminal popup.

src/popupwin.c
src/testdir/dumps/Test_terminal_popup_4.dump [new file with mode: 0644]
src/testdir/test_terminal.vim
src/version.c

index c43800099fe555678c4da8dd7a68a417b33d9aba..56d04b57e9c26dba30092c9ade73fff77605a9cb 100644 (file)
@@ -2371,6 +2371,10 @@ f_popup_close(typval_T *argvars, typval_T *rettv UNUSED)
     void
 popup_hide(win_T *wp)
 {
+#ifdef FEAT_TERMINAL
+    if (error_if_term_popup_window())
+       return;
+#endif
     if ((wp->w_popup_flags & POPF_HIDDEN) == 0)
     {
        wp->w_popup_flags |= POPF_HIDDEN;
diff --git a/src/testdir/dumps/Test_terminal_popup_4.dump b/src/testdir/dumps/Test_terminal_popup_4.dump
new file mode 100644 (file)
index 0000000..de1e6c9
--- /dev/null
@@ -0,0 +1,15 @@
+|3+0&#ffffff0| @12|╔+0&#a8a8a8255|═@44|╗| +0&#ffffff0@13
+|4| @12|║+0&#a8a8a8255|s|o|m|e| |t|e|x|t| @35|║| +0&#ffffff0@13
+|5| @12|║+0&#a8a8a8255|t|o| |e+0&#ffff4012|d|i|t| +0&#a8a8a8255@37|║| +0&#ffffff0@13
+|6| @12|║+0&#a8a8a8255|i|n| |a| |p|o|p|u|p| |w|i|n|d|o|w| @27|║| +0&#ffffff0@13
+|7| @12|║+0&#a8a8a8255|~+0#4040ff13&| @43|║+0#0000000&| +0&#ffffff0@13
+|8| @12|║+0&#a8a8a8255|~+0#4040ff13&| @43|║+0#0000000&| +0&#ffffff0@13
+|9| @12|║+0&#a8a8a8255|~+0#4040ff13&| @43|║+0#0000000&| +0&#ffffff0@13
+|1|0| @11|║+0&#a8a8a8255|/|e|d|i|t| @21|2|,|4| @10|A|l@1| |║| +0&#ffffff0@13
+|1@1| @11|╚+0&#a8a8a8255|═@44|⇲| +0&#ffffff0@13
+|1|2| @72
+|1|3| @72
+|E+0#ffffff16#e000002|r@1|o|r| |d|e|t|e|c|t|e|d| |w|h|i|l|e| |p|r|o|c|e|s@1|i|n|g| |f|u|n|c|t|i|o|n| |H|i|d|e|P|o|p|u|p|:| +0#0000000#ffffff0@23
+|l+0#af5f00255&|i|n|e| @3|1|:| +0#0000000&@64
+|E+0#ffffff16#e000002|8|6|3|:| |N|o|t| |a|l@1|o|w|e|d| |f|o|r| |a| |t|e|r|m|i|n|a|l| |i|n| |a| |p|o|p|u|p| |w|i|n|d|o|w| +0#0000000#ffffff0@24
+|P+0#00e0003&|r|e|s@1| |E|N|T|E|R| |o|r| |t|y|p|e| |c|o|m@1|a|n|d| |t|o| |c|o|n|t|i|n|u|e> +0#0000000&@35
index 3ff5db6852cc0bfdb94a32332afd9807d2be3a12..c028c69f6736489f29af84f20591a2702d3e843f 100644 (file)
@@ -2337,12 +2337,15 @@ func Test_terminal_in_popup()
        \ 'hi PopTerm ctermbg=grey',
        \ 'func OpenTerm(setColor)',
        \ "  let buf = term_start('" .. cmd .. " Xtext', #{hidden: 1, term_finish: 'close'})",
-       \ '  let winid = popup_create(buf, #{minwidth: 45, minheight: 7, border: [], drag: 1, resize: 1})',
+       \ '  let s:winid = popup_create(buf, #{minwidth: 45, minheight: 7, border: [], drag: 1, resize: 1})',
        \ '  if a:setColor',
-       \ '    call win_execute(winid, "set wincolor=PopTerm")',
+       \ '    call win_execute(s:winid, "set wincolor=PopTerm")',
        \ '  endif',
        \ 'endfunc',
        \ 'call OpenTerm(0)',
+       \ 'func HidePopup()',
+       \ '  call popup_hide(s:winid)',
+       \ 'endfunc',
        \ ]
   call writefile(lines, 'XtermPopup')
   let buf = RunVimInTerminal('-S XtermPopup', #{rows: 15})
@@ -2356,6 +2359,10 @@ func Test_terminal_in_popup()
   call term_sendkeys(buf, "/edit\<CR>")
   call VerifyScreenDump(buf, 'Test_terminal_popup_3', {})
  
+  call term_sendkeys(buf, "\<C-W>:call HidePopup()\<CR>")
+  call VerifyScreenDump(buf, 'Test_terminal_popup_4', {})
+  call term_sendkeys(buf, "\<CR>")
+
   call term_sendkeys(buf, ":q\<CR>")
   call term_wait(buf, 100)  " wait for terminal to vanish
 
index e1a2e98c1ca2fdd80b4cfef0fcfe2932e32633ae..97584e37e7db00af64441e9b7c9cecc4f9531626 100644 (file)
@@ -742,6 +742,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    214,
 /**/
     213,
 /**/