if (wp->w_has_scrollbar && wp->w_minwidth > 0)
{
int off = wp->w_width - maxwidth;
-
- if (off > right_extra)
- extra_width -= right_extra;
- else
- extra_width -= off;
+ extra_width -= MIN(off, right_extra);
wp->w_width = maxwidth_no_scrollbar;
}
else
else if (wp->w_popup_pos == POPPOS_TOPRIGHT
|| wp->w_popup_pos == POPPOS_TOPLEFT)
{
+
+ int check_height = (wp->w_popup_flags & POPF_INFO) ? wp->w_height
+ : w_height_before_limit;
if (wp != popup_dragwin
- && wantline + (wp->w_height + extra_height) - 1 > Rows
+ && wantline + (check_height + extra_height) - 1 > Rows
&& wantline * 2 > Rows
&& (wp->w_popup_flags & POPF_POSINVERT))
{
--- /dev/null
+| +0&#ffffff0@74
+@75
+@75
+@75
+@75
+@75
+@1|═+0#0000001#ffd7ff255@3| +0#0000000#ffffff0@4| +0#0000001#ffd7ff255|t|i|t|l|e| | +0#0000000#ffffff0@12| +0#0000001#ffd7ff255@3| +0#0000000#ffffff0@40
+@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
+@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
+@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
+@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
+@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
+@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
+@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
+@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
+@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
+@1|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@4|a+0#0000001#ffd7ff255|s|d|f| @2| +0#0000000#ffffff0@2|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@5|a+0#0000001#ffd7ff255|s|d|f| +0#0000000#ffffff0@40
+@75
+> @74
+|:|c|a|l@1| |C|r|e|a|t|e|P|o|p|u|p|(|)| @37|1|9|,|0|-|1| @7|A|l@1|
call StopVimInTerminal(buf)
endfunc
+func Test_popupwin_bottom_position_without_decoration()
+ CheckScreendump
+ let lines =<< trim END
+ function! CreatePopup()
+ call popup_create(repeat(['asdf'], 10), {
+ \ 'pos': 'topleft',
+ \ 'col': 'cursor+1',
+ \ 'line': 'cursor',
+ \ 'border': [1, 0, 0, 0],
+ \ 'padding': [0, 0, 0, 0],
+ \ 'title': '',
+ \ })
+ call popup_create(repeat(['asdf'], 10), {
+ \ 'pos': 'topleft',
+ \ 'col': 'cursor+10',
+ \ 'line': 'cursor',
+ \ 'border': [0, 0, 0, 0],
+ \ 'padding': [0, 0, 0, 0],
+ \ 'title': 'title',
+ \ })
+ call popup_create(repeat(['asdf'], 10), {
+ \ 'pos': 'topleft',
+ \ 'col': 'cursor+20',
+ \ 'line': 'cursor',
+ \ 'border': [0, 0, 0, 0],
+ \ 'padding': [0, 0, 0, 0],
+ \ 'title': '',
+ \ })
+ call popup_create(repeat(['asdf'], 10), {
+ \ 'pos': 'topleft',
+ \ 'col': 'cursor+30',
+ \ 'line': 'cursor',
+ \ 'border': [0, 0, 0, 0],
+ \ 'padding': [1, 0, 0, 0],
+ \ 'title': '',
+ \ })
+ endfunction
+ END
+ call writefile(lines, 'XtestPopupBottomPostion', 'D')
+ let buf = RunVimInTerminal('-S XtestPopupBottomPostion', #{rows: 20})
+ call term_sendkeys(buf, 'a')
+ call term_sendkeys(buf, repeat("\<CR>", 18))
+ call TermWait(buf, 50)
+ call term_sendkeys(buf, "\<ESC>:call CreatePopup()\<CR>")
+ call TermWait(buf, 50)
+ call VerifyScreenDump(buf, 'Test_popupwin_bottom_position_without_decoration', {})
+ call StopVimInTerminal(buf)
+endfunc
+
" vim: shiftwidth=2 sts=2