1
0
Fork 0
mirror of https://github.com/vim/vim synced 2025-03-26 19:55:11 +01:00

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: 
closes: 

Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Christian Brabandt 2024-09-03 18:20:13 +02:00
parent 3c07eb0c67
commit f00f4d9cce
No known key found for this signature in database
GPG key ID: F3F92DA383FDDE09
5 changed files with 78 additions and 1 deletions

View file

@ -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;
}

View file

@ -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|

View file

@ -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|

View file

@ -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

View file

@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
710,
/**/
709,
/**/