diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-10-03 22:35:52 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-10-03 22:35:52 +0200 |
commit | e8a7dfedfc8ea5c376c7912cb27a9405e4b8c972 (patch) | |
tree | 418a497ee524c8bb1cd2194d3ec35983bd2465c8 | |
parent | 1824f45883ef7cc236d2bba89811989a1ccb853c (diff) | |
download | vim-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.c | 4 | ||||
-rw-r--r-- | src/testdir/test_popupwin.vim | 22 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |