diff --git a/src/popupwin.c b/src/popupwin.c index 0ff57fb4b..8c567173f 100644 --- a/src/popupwin.c +++ b/src/popupwin.c @@ -2758,6 +2758,8 @@ popup_hide(win_T *wp) wp->w_popup_flags |= POPF_HIDDEN; // Do not decrement b_nwindows, we still reference the buffer. + if (wp->w_winrow + popup_height(wp) >= cmdline_row) + clear_cmdline = TRUE; redraw_all_later(UPD_NOT_VALID); popup_mask_refresh = TRUE; } diff --git a/src/testdir/dumps/Test_echowindow_9.dump b/src/testdir/dumps/Test_echowindow_9.dump index 2efdef062..8c48d62fd 100644 --- a/src/testdir/dumps/Test_echowindow_9.dump +++ b/src/testdir/dumps/Test_echowindow_9.dump @@ -4,5 +4,5 @@ |~| @73 |~| @73 |~| @73 -|:+0#0000000&|c|a|l@1| |H|i|d|e|W|i|n|(|)| @59 +| +0#0000000&@74 @57|0|,|0|-|1| @8|A|l@1| diff --git a/src/testdir/dumps/Test_popupwin_hide_clear_cmdline_01.dump b/src/testdir/dumps/Test_popupwin_hide_clear_cmdline_01.dump new file mode 100644 index 000000000..25a79ea74 --- /dev/null +++ b/src/testdir/dumps/Test_popupwin_hide_clear_cmdline_01.dump @@ -0,0 +1,10 @@ +>f+0&#ffffff0|o@1|b|a|r| |o|n|e| |t|w|o| |t|h|r|e@1| @54 +|f|o@1|b|a|r| |o|n|e| |t|w|o| |t|h|r|e@1| @54 +|f|o@1|b|a|r| |o|n|e| |t|w|o| |t|h|r|e@1| @54 +|f|o@1|b|a|r| |o|n|e| |t|w|o| |t|h|r|e@1| @54 +|f|o@1|b|a|r| |o|n|e| |t|w|o| |t|h|r|e@1| @54 +|f|o@1|b|a|r| |o|n|e| |t|w|o| |t|h|r|e@1| @54 +|f|o@1|b|a|r| |o|n|e| |t|w|o| |t|h|r|e@1| @54 +|f|o@1|b|a|r| |o|n|e| |t|w|o| |t|h|r|e@1| @54 +|f|o@1|b|a|r| |o|n|e| |t|w|o| |t|h|r|e@1| @54 +@57|1|,|1| @10|T|o|p| diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim index 64aa654cf..23f318fd6 100644 --- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -4315,4 +4315,67 @@ func Test_popupwin_setbufvar_changing_window_view() bw! endfunc +func Test_popupwin_clears_cmdline_on_hide() + " Test that the command line is properly cleared for overlong + " popup windows and using popup_hide() + CheckScreendump + + let lines =<< trim END + vim9script + var id: number + def Filter(winid: number, key: string): bool + if key == 'q' + popup_hide(winid) + else + return false + endif + return true + enddef + setline(1, repeat(['foobar one two three'], &lines)) + id = popup_create(1, { + col: 1, + minwidth: &columns, + maxwidth: &columns, + minheight: &lines, + maxheight: &lines, + filter: Filter, + }) + END + call writefile(lines, 'XtestPopup_win', 'D') + let buf = RunVimInTerminal('-S XtestPopup_win', #{rows: 10}) + call term_sendkeys(buf, "q") + call term_wait(buf) + call VerifyScreenDump(buf, 'Test_popupwin_hide_clear_cmdline_01', {}) + call StopVimInTerminal(buf) + let lines =<< trim END + vim9script + var id: number + def Filter(winid: number, key: string): bool + if key == 'q' + popup_close(winid) + else + return false + endif + return true + enddef + setline(1, repeat(['foobar one two three'], &lines)) + id = popup_create(1, { + col: 1, + minwidth: &columns, + maxwidth: &columns, + minheight: &lines, + maxheight: &lines, + filter: Filter, + }) + END + call writefile(lines, 'XtestPopup_win2', 'D') + let buf = RunVimInTerminal('-S XtestPopup_win2', #{rows: 10}) + call term_sendkeys(buf, "q") + call term_wait(buf) + call VerifyScreenDump(buf, 'Test_popupwin_hide_clear_cmdline_01', {}) + + " clean up + call StopVimInTerminal(buf) +endfunc + " vim: shiftwidth=2 sts=2 diff --git a/src/version.c b/src/version.c index 2c9ae2c1e..affc9d74e 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 710, /**/ 709, /**/