Mercurial > vim
changeset 36084:aa2f7ffe2c09 v9.1.0710
patch 9.1.0710: popup window may hide part of Command line
Commit: https://github.com/vim/vim/commit/f00f4d9cceb5251aefa0407922d31e7d50e6db14
Author: Christian Brabandt <cb@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 <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 03 Sep 2024 22:45:11 +0200 |
parents | 5f02ee300d0d |
children | a2df42ed826f |
files | src/popupwin.c src/testdir/dumps/Test_echowindow_9.dump src/testdir/dumps/Test_popupwin_hide_clear_cmdline_01.dump src/testdir/test_popupwin.vim src/version.c |
diffstat | 5 files changed, 78 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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; }
--- 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|
new file mode 100644 --- /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|
--- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -4315,4 +4315,67 @@ func Test_popupwin_setbufvar_changing_wi 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