]> granicus.if.org Git - vim/commitdiff
patch 8.1.1622: wrong width if displaying a lot of lines in a popup window v8.1.1622
authorBram Moolenaar <Bram@vim.org>
Wed, 3 Jul 2019 21:20:18 +0000 (23:20 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 3 Jul 2019 21:20:18 +0000 (23:20 +0200)
Problem:    Wrong width if displaying a lot of lines in a popup window.
Solution:   Accurately compute the line overflow.

src/popupwin.c
src/testdir/dumps/Test_popupwin_firstline.dump
src/testdir/test_popupwin.vim
src/version.c

index df0cda83c0224e2219923655a6237bc289744c1b..099a0c26a339c9a4d18201707244ef1495d26e30 100644 (file)
@@ -855,8 +855,8 @@ popup_adjust_position(win_T *wp)
        if (wp->w_width < len)
            wp->w_width = len;
        // do not use the width of lines we're not going to show
-       if (wp->w_maxheight > 0 && wp->w_buffer->b_ml.ml_line_count
-                              - wp->w_topline + 1 + wrapped > wp->w_maxheight)
+       if (wp->w_maxheight > 0
+                      && lnum - wp->w_topline + 1 + wrapped > wp->w_maxheight)
            break;
     }
 
index 13712973dddff83c57fac175e0c7f277783a0eaa..b3b0349305dc406e6fa59d72c3bbe994f40f5806 100644 (file)
@@ -1,10 +1,10 @@
 >1+0&#ffffff0| @73
 |2| @73
 |3| @73
-|4| @33|3+0#0000001#ffd7ff255@4| +0#0000000#a8a8a8255| +0&#ffffff0@33
-|5| @33|4+0#0000001#ffd7ff255@1| @2| +0#0000000#0000001| +0&#ffffff0@33
-|6| @33|5+0#0000001#ffd7ff255| @3| +0#0000000#0000001| +0&#ffffff0@33
-|7| @33|6+0#0000001#ffd7ff255@4| +0#0000000#a8a8a8255| +0&#ffffff0@33
+|4| @32|3+0#0000001#ffd7ff255@4| | +0#0000000#a8a8a8255| +0&#ffffff0@33
+|5| @32|4+0#0000001#ffd7ff255@1| @3| +0#0000000#0000001| +0&#ffffff0@33
+|6| @32|5+0#0000001#ffd7ff255| @4| +0#0000000#0000001| +0&#ffffff0@33
+|7| @32|6+0#0000001#ffd7ff255@5| +0#0000000#a8a8a8255| +0&#ffffff0@33
 |8| @73
 |9| @73
 @57|1|,|1| @10|T|o|p| 
index cc259762c2052df39bc0453489adad3650df2665..f7579f540727b7753294128fb3761afb64b9499a 100644 (file)
@@ -1697,3 +1697,16 @@ func Test_popupwin_with_buffer()
   redraw
   call popup_close(winid)
 endfunc
+
+func Test_popupwin_width()
+  let winid = popup_create(repeat(['short', 'long long long line', 'medium width'], 50), {
+       \ 'maxwidth': 40,
+       \ 'maxheight': 10,
+       \ })
+  for top in range(1, 20)
+    call popup_setoptions(winid, {'firstline': top})
+    redraw
+    call assert_equal(19, popup_getpos(winid).width)
+  endfor
+  call popup_clear()
+endfunc
index 8fd5239f12df7d98ab78df6abeb74c8a97e7899c..efad64cad03e6693e08803092cbffc55ad503531 100644 (file)
@@ -777,6 +777,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1622,
 /**/
     1621,
 /**/