patch 9.1.0710: popup window may hide part of Command line Commit: https://github.com/vim/vim/commit/f00f4d9cceb5251aefa0407922d31e7d50e6db14 Author: Christian Brabandt <c...@256bit.org> Date: Tue Sep 3 18:20:13 2024 +0200
patch 9.1.0710: popup window may hide part of Command line Problem: when a popup window covers the command line, the command line is not completely cleared on popup_hide() (yu3s) Solution: Check if the popup window covers the command line and if it does, set the clear_cmdline flag. fixes: #15608 closes: #15610 Signed-off-by: Christian Brabandt <c...@256bit.org> 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, /**/ -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/vim_dev/E1slaOm-009iG7-1l%40256bit.org.