patch 8.1.2240: popup window width changes when scrolling
Problem: Popup window width changes when scrolling.
Solution: Also adjust maxwidth when applying minwidth and there is a
scrollbar. Fix off-by-one error. (closes #5162)
diff --git a/src/popupwin.c b/src/popupwin.c
index 212076b..d6e6207 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -1201,6 +1201,7 @@
allow_adjust_left = FALSE;
maxwidth = wp->w_maxwidth;
}
+ minwidth = wp->w_minwidth;
// start at the desired first line
if (wp->w_firstline > 0)
@@ -1270,18 +1271,19 @@
if (wp->w_maxwidth > 0 && wp->w_width > wp->w_maxwidth)
wp->w_width = wp->w_maxwidth;
}
- // do not use the width of lines we're not going to show
- if (wp->w_maxheight > 0
- && (wp->w_firstline >= 0
- ? lnum - wp->w_topline
- : wp->w_buffer->b_ml.ml_line_count - lnum)
- + 1 + wrapped > wp->w_maxheight)
- break;
if (wp->w_firstline < 0)
--lnum;
else
++lnum;
+
+ // do not use the width of lines we're not going to show
+ if (wp->w_maxheight > 0
+ && (wp->w_firstline >= 0
+ ? lnum - wp->w_topline
+ : wp->w_buffer->b_ml.ml_line_count - lnum)
+ + wrapped >= wp->w_maxheight)
+ break;
}
if (wp->w_firstline < 0)
@@ -1293,11 +1295,13 @@
{
++right_extra;
++extra_width;
- if (used_maxwidth)
- maxwidth -= 2; // try to show the scrollbar
+ // make space for the scrollbar if needed, when lines wrap and when
+ // applying minwidth
+ if (maxwidth + right_extra >= maxspace
+ && (used_maxwidth || (minwidth > 0 && wp->w_width < minwidth)))
+ maxwidth -= wp->w_popup_padding[1] + 1;
}
- minwidth = wp->w_minwidth;
if (wp->w_popup_title != NULL && *wp->w_popup_title != NUL)
{
int title_len = vim_strsize(wp->w_popup_title) + 2 - extra_width;