summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-10-03 22:35:52 +0200
committerBram Moolenaar <Bram@vim.org>2019-10-03 22:35:52 +0200
commite8a7dfedfc8ea5c376c7912cb27a9405e4b8c972 (patch)
tree418a497ee524c8bb1cd2194d3ec35983bd2465c8
parent1824f45883ef7cc236d2bba89811989a1ccb853c (diff)
downloadvim-git-e8a7dfedfc8ea5c376c7912cb27a9405e4b8c972.tar.gz
patch 8.1.2110: CTRL-C closes two popups instead of onev8.1.2110
Problem: CTRL-C closes two popups instead of one. Solution: Reset got_int when the filter consumed the key.
-rw-r--r--src/getchar.c4
-rw-r--r--src/testdir/test_popupwin.vim22
-rw-r--r--src/version.c2
3 files changed, 28 insertions, 0 deletions
diff --git a/src/getchar.c b/src/getchar.c
index fcdc63968..5e098dfcf 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -1791,7 +1791,11 @@ vgetc(void)
#endif
#ifdef FEAT_TEXT_PROP
if (popup_do_filter(c))
+ {
+ if (c == Ctrl_C)
+ got_int = FALSE; // avoid looping
c = K_IGNORE;
+ }
#endif
// Need to process the character before we know it's safe to do something
diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim
index 9d8a0d099..771db9a69 100644
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -2568,4 +2568,26 @@ func Test_popupwin_getoptions_tablocal()
quit
endfunc
+func Test_popupwin_cancel()
+ let win1 = popup_create('one', #{line: 5, filter: {... -> 0}})
+ let win2 = popup_create('two', #{line: 10, filter: {... -> 0}})
+ let win3 = popup_create('three', #{line: 15, filter: {... -> 0}})
+ call assert_equal(5, popup_getpos(win1).line)
+ call assert_equal(10, popup_getpos(win2).line)
+ call assert_equal(15, popup_getpos(win3).line)
+ " TODO: this also works without patch 8.1.2110
+ call feedkeys("\<C-C>", 'xt')
+ call assert_equal(5, popup_getpos(win1).line)
+ call assert_equal(10, popup_getpos(win2).line)
+ call assert_equal({}, popup_getpos(win3))
+ call feedkeys("\<C-C>", 'xt')
+ call assert_equal(5, popup_getpos(win1).line)
+ call assert_equal({}, popup_getpos(win2))
+ call assert_equal({}, popup_getpos(win3))
+ call feedkeys("\<C-C>", 'xt')
+ call assert_equal({}, popup_getpos(win1))
+ call assert_equal({}, popup_getpos(win2))
+ call assert_equal({}, popup_getpos(win3))
+endfunc
+
" vim: shiftwidth=2 sts=2
diff --git a/src/version.c b/src/version.c
index 00374c20e..ee1525d88 100644
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2110,
+/**/
2109,
/**/
2108,