0
0
mirror of https://github.com/vim/vim.git synced 2025-09-28 04:24:06 -04:00

patch 8.2.1414: popupwindow missing last couple of lines

Problem:    Popupwindow missing last couple of lines when cursor is in the
            first line.
Solution:   Compute the max height also when top aligned. (closes #6664)
This commit is contained in:
Bram Moolenaar
2020-08-10 20:39:17 +02:00
parent 94f4ffa770
commit bf61fdd008
5 changed files with 45 additions and 18 deletions

View File

@@ -1134,6 +1134,7 @@ popup_adjust_position(win_T *wp)
int wantline = wp->w_wantline; // adjusted for textprop int wantline = wp->w_wantline; // adjusted for textprop
int wantcol = wp->w_wantcol; // adjusted for textprop int wantcol = wp->w_wantcol; // adjusted for textprop
int use_wantcol = wantcol != 0; int use_wantcol = wantcol != 0;
int adjust_height_for_top_aligned = FALSE;
wp->w_winrow = 0; wp->w_winrow = 0;
wp->w_wincol = 0; wp->w_wincol = 0;
@@ -1483,16 +1484,7 @@ popup_adjust_position(win_T *wp)
// Not enough space and more space on the other side: make top // Not enough space and more space on the other side: make top
// aligned. // aligned.
wp->w_winrow = (wantline < 0 ? 0 : wantline) + 1; wp->w_winrow = (wantline < 0 ? 0 : wantline) + 1;
if (wp->w_winrow + wp->w_height + extra_height >= Rows) adjust_height_for_top_aligned = TRUE;
{
wp->w_height = Rows - wp->w_winrow - extra_height;
if (wp->w_want_scrollbar
#ifdef FEAT_TERMINAL
&& wp->w_buffer->b_term == NULL
#endif
)
wp->w_has_scrollbar = TRUE;
}
} }
} }
else if (wp->w_popup_pos == POPPOS_TOPRIGHT else if (wp->w_popup_pos == POPPOS_TOPRIGHT
@@ -1513,9 +1505,25 @@ popup_adjust_position(win_T *wp)
} }
} }
else else
{
wp->w_winrow = wantline - 1; wp->w_winrow = wantline - 1;
adjust_height_for_top_aligned = TRUE;
} }
// make sure w_window is valid }
if (adjust_height_for_top_aligned && wp->w_want_scrollbar
&& wp->w_winrow + wp->w_height + extra_height > Rows)
{
// Bottom of the popup goes below the last line, reduce the height and
// add a scrollbar.
wp->w_height = Rows - wp->w_winrow - extra_height;
#ifdef FEAT_TERMINAL
if (wp->w_buffer->b_term == NULL)
#endif
wp->w_has_scrollbar = TRUE;
}
// make sure w_winrow is valid
if (wp->w_winrow >= Rows) if (wp->w_winrow >= Rows)
wp->w_winrow = Rows - 1; wp->w_winrow = Rows - 1;
else if (wp->w_winrow < 0) else if (wp->w_winrow < 0)

View File

@@ -3,10 +3,10 @@
|-|║+0#0000001#ffd7ff255|t|w|o|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255|t|w|o|║|-+0#0000000#ffffff0@8|║+0#0000001#ffd7ff255|b@2|║|-+0#0000000#ffffff0@15|║+0#0000001#ffd7ff255|t|w|o|║|-+0#0000000#ffffff0@11| @14 |-|║+0#0000001#ffd7ff255|t|w|o|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255|t|w|o|║|-+0#0000000#ffffff0@8|║+0#0000001#ffd7ff255|b@2|║|-+0#0000000#ffffff0@15|║+0#0000001#ffd7ff255|t|w|o|║|-+0#0000000#ffffff0@11| @14
|-|╚+0#0000001#ffd7ff255|═@2|╝|-+0#0000000#ffffff0@1|╚+0#0000001#ffd7ff255|═@2|╝|-+0#0000000#ffffff0@8|║+0#0000001#ffd7ff255|c@2|║|-+0#0000000#ffffff0@15|║+0#0000001#ffd7ff255|t|e@1|║|-+0#0000000#ffffff0@11| @14 |-|╚+0#0000001#ffd7ff255|═@2|╝|-+0#0000000#ffffff0@1|╚+0#0000001#ffd7ff255|═@2|╝|-+0#0000000#ffffff0@8|║+0#0000001#ffd7ff255|c@2|║|-+0#0000000#ffffff0@15|║+0#0000001#ffd7ff255|t|e@1|║|-+0#0000000#ffffff0@11| @14
|-|@|-@5|#|-@5|%|-@5|║+0#0000001#ffd7ff255|d@2|║|-+0#0000000#ffffff0@15|║+0#0000001#ffd7ff255|f|o|u|║|-+0#0000000#ffffff0@1>*|-@8| @14 |-|@|-@5|#|-@5|%|-@5|║+0#0000001#ffd7ff255|d@2|║|-+0#0000000#ffffff0@15|║+0#0000001#ffd7ff255|f|o|u|║|-+0#0000000#ffffff0@1>*|-@8| @14
|-@14|╔+0#0000001#ffd7ff255|═@2|╗|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255|e@2|║|-+0#0000000#ffffff0@15|║+0#0000001#ffd7ff255|f|i|v|║|-+0#0000000#ffffff0@1|╔+0#0000001#ffd7ff255|═@2|╗|-+0#0000000#ffffff0@4| @14 |-@14|╔+0#0000001#ffd7ff255|═@2|╗|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255|e@2|║|-+0#0000000#ffffff0@15|║+0#0000001#ffd7ff255|f|i|v|║|-+0#0000000#ffffff0@1|╔+0#0000001#ffd7ff255|═@3|╗|-+0#0000000#ffffff0@3| @14
|-@14|║+0#0000001#ffd7ff255|o|n|e|║|-+0#0000000#ffffff0@1|╚+0#0000001#ffd7ff255|═@2|╝|-+0#0000000#ffffff0@15|╚+0#0000001#ffd7ff255|═@2|╝|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255|a@2||-+0#0000000#ffffff0@4| @14 |-@14|║+0#0000001#ffd7ff255|o|n|e|║|-+0#0000000#ffffff0@1|╚+0#0000001#ffd7ff255|═@2|╝|-+0#0000000#ffffff0@15|╚+0#0000001#ffd7ff255|═@2|╝|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255|a@2| +0#0000000#0000001|║+0#0000001#ffd7ff255|-+0#0000000#ffffff0@3| @14
|-@14|║+0#0000001#ffd7ff255|t|w|o|║|-+0#0000000#ffffff0@1|*|-@5|@|-@5|#|-@5|%|-@5|║+0#0000001#ffd7ff255|b@2||-+0#0000000#ffffff0@4| @14 |-@14|║+0#0000001#ffd7ff255|t|w|o|║|-+0#0000000#ffffff0@1|*|-@5|@|-@5|#|-@5|%|-@5|║+0#0000001#ffd7ff255|b@2| +0#0000000#0000001|║+0#0000001#ffd7ff255|-+0#0000000#ffffff0@3| @14
|-@14|║+0#0000001#ffd7ff255|t|e@1|║|-+0#0000000#ffffff0@8|╔+0#0000001#ffd7ff255|═@2|╗|-+0#0000000#ffffff0@1|╔+0#0000001#ffd7ff255|═@2|╗|-+0#0000000#ffffff0@8|║+0#0000001#ffd7ff255|c@2||-+0#0000000#ffffff0@4| @14 |-@14|║+0#0000001#ffd7ff255|t|e@1|║|-+0#0000000#ffffff0@8|╔+0#0000001#ffd7ff255|═@2|╗|-+0#0000000#ffffff0@1|╔+0#0000001#ffd7ff255|═@3|╗|-+0#0000000#ffffff0@7|║+0#0000001#ffd7ff255|c@2| +0#0000000#0000001|║+0#0000001#ffd7ff255|-+0#0000000#ffffff0@3| @14
|-@14|╚+0#0000001#ffd7ff255|═@2|╝|-+0#0000000#ffffff0@8|║+0#0000001#ffd7ff255|o|n|e|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255|o|n|e||-+0#0000000#ffffff0@8|║+0#0000001#ffd7ff255|d@2||-+0#0000000#ffffff0@4| @14 |-@14|╚+0#0000001#ffd7ff255|═@2|╝|-+0#0000000#ffffff0@8|║+0#0000001#ffd7ff255|o|n|e|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255|o|n|e| +0#0000000#0000001|║+0#0000001#ffd7ff255|-+0#0000000#ffffff0@7|║+0#0000001#ffd7ff255|d@2| +0#0000000#0000001|║+0#0000001#ffd7ff255|-+0#0000000#ffffff0@3| @14
|-@28|║+0#0000001#ffd7ff255|t|w|o|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255|t|w|o||-+0#0000000#ffffff0@8|║+0#0000001#ffd7ff255|e@2||-+0#0000000#ffffff0@4| @14 |-@28|║+0#0000001#ffd7ff255|t|w|o|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255|t|w|o| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255|-+0#0000000#ffffff0@7|║+0#0000001#ffd7ff255|e@2| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255|-+0#0000000#ffffff0@3| @14
@29|╚+0#0000001#ffd7ff255|═@2|╝| +0#0000000#ffffff0@1|+0#0000001#ffd7ff255|t|e@1|║| +0#0000000#ffffff0@8|║+0#0000001#ffd7ff255|f@2|║| +0#0000000#ffffff0@1|5|,|5|1| @9|T|o|p| @29|╚+0#0000001#ffd7ff255|═@2|╝| +0#0000000#ffffff0@1|+0#0000001#ffd7ff255|═@3|╝| +0#0000000#ffffff0@7|╚+0#0000001#ffd7ff255|═@3|╝| +0#0000000#ffffff0|5|,|5|1| @9|T|o|p|

View File

@@ -0,0 +1,10 @@
|1+0&#ffffff0@8>1| @64
|2@8|╔+0#0000001#ffd7ff255|═@8|╗| +0#0000000#ffffff0@54
|3@8|║+0#0000001#ffd7ff255|o|n|e| @4| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@54
|4@8|║+0#0000001#ffd7ff255|t|w|o| @4| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@54
|5@8|║+0#0000001#ffd7ff255|t|h|r|e@1| @2| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@54
|6@8|║+0#0000001#ffd7ff255|f|o|u|r| @3| +0#0000000#0000001|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@54
|7@8|║+0#0000001#ffd7ff255|f|i|v|e| @3| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@54
|8@8|║+0#0000001#ffd7ff255|s|i|x| @4| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@54
|9@8|║+0#0000001#ffd7ff255|s|e|v|e|n| @2| +0#0000000#a8a8a8255|║+0#0000001#ffd7ff255| +0#0000000#ffffff0@54
|:|c|a|l@1| |S|h|o|╚+0#0000001#ffd7ff255|═@8|╝| +0#0000000#ffffff0@36|1|,|1|0| @9|T|o|p|

View File

@@ -753,6 +753,7 @@ func Test_popup_with_mask()
\ posinvert: 0, \ posinvert: 0,
\ wrap: 0, \ wrap: 0,
\ fixed: 1, \ fixed: 1,
\ scrollbar: v:false,
\ zindex: 90, \ zindex: 90,
\ padding: [], \ padding: [],
\ highlight: 'PopupColor', \ highlight: 'PopupColor',
@@ -772,6 +773,7 @@ func Test_popup_with_mask()
\ posinvert: 0, \ posinvert: 0,
\ wrap: 0, \ wrap: 0,
\ fixed: 1, \ fixed: 1,
\ scrollbar: v:false,
\ close: 'button', \ close: 'button',
\ zindex: 90, \ zindex: 90,
\ padding: [], \ padding: [],
@@ -2169,6 +2171,11 @@ func Test_popup_too_high_scrollbar()
call term_sendkeys(buf, ":call ShowPopup()\<CR>") call term_sendkeys(buf, ":call ShowPopup()\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_toohigh_2', {}) call VerifyScreenDump(buf, 'Test_popupwin_toohigh_2', {})
call term_sendkeys(buf, ":call popup_clear()\<CR>")
call term_sendkeys(buf, "gg$")
call term_sendkeys(buf, ":call ShowPopup()\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_toohigh_3', {})
" clean up " clean up
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
call delete('XtestPopupToohigh') call delete('XtestPopupToohigh')

View File

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