diff options
-rw-r--r-- | src/popupmenu.c | 8 | ||||
-rw-r--r-- | src/testdir/dumps/Test_popupmenu_cmdline_1.dump | 4 | ||||
-rw-r--r-- | src/testdir/test_menu.vim | 21 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 35 insertions, 0 deletions
diff --git a/src/popupmenu.c b/src/popupmenu.c index d713ed4283..36d3b9944e 100644 --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -18,6 +18,7 @@ static int pum_selected; // index of selected item or -1 static int pum_first = 0; // index of top item static int call_update_screen = FALSE; +static int pum_in_cmdline = FALSE; static int pum_height; // nr of displayed pum items static int pum_width; // width of displayed pum items @@ -1067,6 +1068,11 @@ pum_undisplay(void) pum_array = NULL; redraw_all_later(UPD_NOT_VALID); redraw_tabline = TRUE; + if (pum_in_cmdline) + { + clear_cmdline = TRUE; + pum_in_cmdline = FALSE; + } status_redraw_all(); #if defined(FEAT_PROP_POPUP) && defined(FEAT_QUICKFIX) // hide any popup info window @@ -1193,6 +1199,8 @@ pum_position_at_mouse(int min_width) pum_row = mouse_row + 1; if (pum_height > Rows - pum_row) pum_height = Rows - pum_row; + if (pum_row + pum_height > cmdline_row) + pum_in_cmdline = TRUE; } else { diff --git a/src/testdir/dumps/Test_popupmenu_cmdline_1.dump b/src/testdir/dumps/Test_popupmenu_cmdline_1.dump new file mode 100644 index 0000000000..2ffcc469e2 --- /dev/null +++ b/src/testdir/dumps/Test_popupmenu_cmdline_1.dump @@ -0,0 +1,4 @@ +>a+0&#ffffff0|b|c|d|e| @69 +|a|b|c|d|e| @69 +|a|b|c|d|e| @69 +@57|1|,|1| @10|T|o|p| diff --git a/src/testdir/test_menu.vim b/src/testdir/test_menu.vim index 9929dd5e74..22292289ee 100644 --- a/src/testdir/test_menu.vim +++ b/src/testdir/test_menu.vim @@ -594,4 +594,25 @@ func Test_unmenu_while_listing_menus() call StopVimInTerminal(buf) endfunc +" Test for opening a menu drawn in the cmdline area +func Test_popupmenu_cmdline() + CheckRunVimInTerminal + + let lines =<< trim END + set mousemodel=popup + menu PopUp.Test1 :<CR> + menu PopUp.Test2 :<CR> + menu PopUp.Test3 :<CR> + call setline(1, repeat(['abcde'], 5)) + END + call writefile(lines, 'Xpopupcmdline', 'D') + let buf = RunVimInTerminal('-S Xpopupcmdline', {'rows': 4}) + + " cmdline area should be cleared when popupmenu that covered it is closed + call term_sendkeys(buf, "\<RightMouse>\<RightRelease>\<Esc>") + call VerifyScreenDump(buf, 'Test_popupmenu_cmdline_1', {}) + + call StopVimInTerminal(buf) +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index b8cc4d99bd..c17109c44f 100644 --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1480, +/**/ 1479, /**/ 1478, |