summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-09-14 22:23:29 +0200
committerBram Moolenaar <Bram@vim.org>2019-09-14 22:23:29 +0200
commit076d98839c4f6f15ae3563263057aa99ff04a869 (patch)
treeb980cce0ef29ef32998aba1cf6c80cbc03270109
parent5babc6e858afbfa54aa0e203a64b9c70175487b7 (diff)
downloadvim-git-8.1.2032.tar.gz
patch 8.1.2032: scrollbar thumb wrong in popup windowv8.1.2032
Problem: Scrollbar thumb wrong in popup window. Solution: Adjust thumb size and position when scrolled.
-rw-r--r--src/popupwin.c11
-rw-r--r--src/testdir/dumps/Test_popupwin_scroll_2.dump4
-rw-r--r--src/version.c2
3 files changed, 12 insertions, 5 deletions
diff --git a/src/popupwin.c b/src/popupwin.c
index 066720040..81cc17f2d 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -3363,10 +3363,12 @@ update_popups(void (*win_update)(win_T *wp))
// Compute scrollbar thumb position and size.
if (wp->w_has_scrollbar)
{
- linenr_T linecount = wp->w_buffer->b_ml.ml_line_count;
+ linenr_T linecount = wp->w_buffer->b_ml.ml_line_count;
+ int height = wp->w_height;
- sb_thumb_height = (wp->w_height * wp->w_height + linecount / 2)
- / linecount;
+ sb_thumb_height = (height * height + linecount / 2) / linecount;
+ if (wp->w_topline > 1 && sb_thumb_height == height)
+ --sb_thumb_height; // scrolled, no full thumb
if (sb_thumb_height == 0)
sb_thumb_height = 1;
if (linecount <= wp->w_height)
@@ -3377,6 +3379,9 @@ update_popups(void (*win_update)(win_T *wp))
+ (linecount / wp->w_height) / 2)
* (wp->w_height - sb_thumb_height)
/ (linecount - wp->w_height);
+ if (wp->w_topline > 1 && sb_thumb_top == 0 && height > 1)
+ sb_thumb_top = 1; // show it's scrolled
+
if (wp->w_scrollbar_highlight != NULL)
attr_scroll = syn_name2attr(wp->w_scrollbar_highlight);
else
diff --git a/src/testdir/dumps/Test_popupwin_scroll_2.dump b/src/testdir/dumps/Test_popupwin_scroll_2.dump
index 3b2145e90..227ba6c46 100644
--- a/src/testdir/dumps/Test_popupwin_scroll_2.dump
+++ b/src/testdir/dumps/Test_popupwin_scroll_2.dump
@@ -1,9 +1,9 @@
>1+0&#ffffff0| @73
|2| @73
|3| @73
-|4| @31|t+0#0000001#ffd7ff255|w|o| @4| +0#0000000#0000001| +0&#ffffff0@32
+|4| @31|t+0#0000001#ffd7ff255|w|o| @4| +0#0000000#a8a8a8255| +0&#ffffff0@32
|5| @31|t+0#0000001#ffd7ff255|h|r|e@1| @2| +0#0000000#0000001| +0&#ffffff0@32
-|6| @31|f+0#0000001#ffd7ff255|o|u|r| @3| +0#0000000#a8a8a8255| +0&#ffffff0@32
+|6| @31|f+0#0000001#ffd7ff255|o|u|r| @3| +0#0000000#0000001| +0&#ffffff0@32
|7| @31|f+0#0000001#ffd7ff255|i|v|e| @3| +0#0000000#a8a8a8255| +0&#ffffff0@32
|8| @73
|9| @73
diff --git a/src/version.c b/src/version.c
index 61e41bd60..0c6b2d8ca 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2032,
+/**/
2031,
/**/
2030,