Patch 8.1.1597
Problem: Cannot scroll a popup window with the mouse.
Solution: If the popup window has a scrollbar let the mouse scroll wheel
scroll the window.
Files: runtime/doc/popup.txt, src/normal.c, src/popupwin.c, src/screen.c,
src/testdir/dumps/Test_popupwin_firstline.dump,
src/testdir/dumps/Test_popupwin_scroll_1.dump,
src/testdir/dumps/Test_popupwin_scroll_2.dump,
src/testdir/dumps/Test_popupwin_scroll_3.dump,
src/testdir/dumps/Test_popupwin_scroll_5.dump,
src/testdir/dumps/Test_popupwin_scroll_6.dump,
src/testdir/dumps/Test_popupwin_scroll_7.dump
*** ../vim-8.1.1596/runtime/doc/popup.txt 2019-06-25 05:15:15.188891898
+0200
--- runtime/doc/popup.txt 2019-06-26 03:38:38.653919493 +0200
***************
*** 85,95 ****
that it is in.
-
TODO:
! - When the lines do not fit show a scrollbar (like in the popup menu).
! - Use the mouse wheel for scrolling.
! - Have a way to scroll to the botton. (#4577)
- Why does 'nrformats' leak from the popup window buffer???
- Disable commands, feedkeys(), CTRL-W, etc. in a popup window.
Use ERROR_IF_POPUP_WINDOW for more commands.
--- 85,95 ----
that it is in.
TODO:
! - click near top of scrollbar scrolls down, clear near bottom scrolls up.
! - Allow for setting scrollbar color: scrollbarhighlight,
! scrollbarthumbhighlight ?
! - Have a way to scroll to the bottom? (#4577)
- Why does 'nrformats' leak from the popup window buffer???
- Disable commands, feedkeys(), CTRL-W, etc. in a popup window.
Use ERROR_IF_POPUP_WINDOW for more commands.
***************
*** 275,280 ****
--- 275,282 ----
core_line screen line of the text box
core_width width of the text box in screen cells
core_height height of the text box in screen cells
+ firstline line of the buffer at top (1 unless scrolled)
+ scrollbar non-zero if a scrollbar is displayed
visible one if the popup is displayed, zero if hidden
Note that these are the actual screen positions. They differ
from the values in `popup_getoptions()` for the sizing and
***************
*** 483,489 ****
Also see "scrollbar".
hidden When TRUE the popup exists but is not displayed; use
`popup_show()` to unhide it.
- {not implemented yet}
tabpage When -1: display the popup on all tab pages.
When 0 (the default): display the popup on the current
tab page.
--- 485,490 ----
*** ../vim-8.1.1596/src/normal.c 2019-06-25 04:12:12.312665250 +0200
--- src/normal.c 2019-06-26 02:36:22.631035658 +0200
***************
*** 4521,4529 ****
col = mouse_col;
/* find the window at the pointer coordinates */
! wp = mouse_find_win(&row, &col, FAIL_POPUP);
if (wp == NULL)
return;
curwin = wp;
curbuf = curwin->w_buffer;
}
--- 4521,4533 ----
col = mouse_col;
/* find the window at the pointer coordinates */
! wp = mouse_find_win(&row, &col, FIND_POPUP);
if (wp == NULL)
return;
+ #ifdef FEAT_TEXT_PROP
+ if (bt_popup(wp->w_buffer) && !wp->w_has_scrollbar)
+ return;
+ #endif
curwin = wp;
curbuf = curwin->w_buffer;
}
***************
*** 4543,4552 ****
}
else
{
! cap->count1 = 3;
! cap->count0 = 3;
nv_scroll_line(cap);
}
}
# ifdef FEAT_GUI
else
--- 4547,4581 ----
}
else
{
! // Don't scroll more than half the window height.
! if (curwin->w_height < 6)
! {
! cap->count1 = curwin->w_height / 2;
! if (cap->count1 == 0)
! cap->count1 = 1;
! }
! else
! cap->count1 = 3;
! cap->count0 = cap->count1;
nv_scroll_line(cap);
}
+ #ifdef FEAT_TEXT_PROP
+ if (bt_popup(wp->w_buffer))
+ {
+ int height = wp->w_height;
+
+ curwin->w_firstline = curwin->w_topline;
+ popup_adjust_position(curwin);
+
+ // we don't want the popup to get smaller, decrement the first line
+ // until it doesn't
+ while (curwin->w_firstline > 1 && curwin->w_height < height)
+ {
+ --curwin->w_firstline;
+ popup_adjust_position(curwin);
+ }
+ }
+ #endif
}
# ifdef FEAT_GUI
else
*** ../vim-8.1.1596/src/popupwin.c 2019-06-26 01:03:49.489879814 +0200
--- src/popupwin.c 2019-06-26 02:54:34.662852966 +0200
***************
*** 1547,1552 ****
--- 1547,1553 ----
dict_add_number(dict, "core_height", wp->w_height);
dict_add_number(dict, "scrollbar", wp->w_has_scrollbar);
+ dict_add_number(dict, "firstline", wp->w_topline);
dict_add_number(dict, "visible",
win_valid(wp) && (wp->w_popup_flags & POPF_HIDDEN) == 0);
}
***************
*** 2238,2249 ****
{
linenr_T linecount = wp->w_buffer->b_ml.ml_line_count;
! sb_thumb_height = wp->w_height * wp->w_height / linecount;
if (sb_thumb_height == 0)
sb_thumb_height = 1;
! sb_thumb_top = ((wp->w_topline * (wp->w_height - sb_thumb_height)
! + (linecount - wp->w_height) / 2))
! / (linecount - (wp->w_height - sb_thumb_height));
}
for (i = wp->w_popup_border[0];
--- 2239,2251 ----
{
linenr_T linecount = wp->w_buffer->b_ml.ml_line_count;
! sb_thumb_height = (wp->w_height * wp->w_height + linecount / 2)
! / linecount;
if (sb_thumb_height == 0)
sb_thumb_height = 1;
! sb_thumb_top = (wp->w_topline - 1 + (linecount / wp->w_height) / 2)
! * (wp->w_height - sb_thumb_height)
! / (linecount - wp->w_height);
}
for (i = wp->w_popup_border[0];
*** ../vim-8.1.1596/src/screen.c 2019-06-23 00:15:02.577534926 +0200
--- src/screen.c 2019-06-26 03:05:49.828469527 +0200
***************
*** 875,881 ****
#endif
#ifdef FEAT_TEXT_PROP
// Update popup_mask if needed.
! may_update_popup_mask(0);
#endif
}
--- 875,881 ----
#endif
#ifdef FEAT_TEXT_PROP
// Update popup_mask if needed.
! may_update_popup_mask(must_redraw);
#endif
}
***************
*** 1555,1561 ****
if (mid_start == 0)
{
mid_end = wp->w_height;
! if (ONE_WINDOW)
{
/* Clear the screen when it was not done by win_del_lines() or
* win_ins_lines() above, "screen_cleared" is FALSE or MAYBE
--- 1555,1565 ----
if (mid_start == 0)
{
mid_end = wp->w_height;
! if (ONE_WINDOW
! #ifdef FEAT_TEXT_PROP
! && !bt_popup(wp->w_buffer)
! #endif
! )
{
/* Clear the screen when it was not done by win_del_lines() or
* win_ins_lines() above, "screen_cleared" is FALSE or MAYBE
*** ../vim-8.1.1596/src/testdir/dumps/Test_popupwin_firstline.dump
2019-06-25 05:15:15.188891898 +0200
--- src/testdir/dumps/Test_popupwin_firstline.dump 2019-06-26
03:13:17.554776056 +0200
***************
*** 3,9 ****
|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#a8a8a8255| +0&#ffffff0@33
|7| @33|6+0#0000001#ffd7ff255@4| +0#0000000#a8a8a8255| +0&#ffffff0@33
|8| @73
|9| @73
--- 3,9 ----
|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
|8| @73
|9| @73
*** ../vim-8.1.1596/src/testdir/dumps/Test_popupwin_scroll_1.dump
2019-06-25 05:15:15.188891898 +0200
--- src/testdir/dumps/Test_popupwin_scroll_1.dump 2019-06-26
03:17:03.285909075 +0200
***************
*** 2,8 ****
|2| @73
|3| @73
|4| @31|o+0#0000001#ffd7ff255|n|e| @4| +0#0000000#0000001| +0&#ffffff0@32
! |5| @31|t+0#0000001#ffd7ff255|w|o| @4| +0#0000000#a8a8a8255| +0&#ffffff0@32
|6| @31|t+0#0000001#ffd7ff255|h|r|e@1| @2| +0#0000000#a8a8a8255|
+0&#ffffff0@32
|7| @31|f+0#0000001#ffd7ff255|o|u|r| @3| +0#0000000#a8a8a8255| +0&#ffffff0@32
|8| @73
--- 2,8 ----
|2| @73
|3| @73
|4| @31|o+0#0000001#ffd7ff255|n|e| @4| +0#0000000#0000001| +0&#ffffff0@32
! |5| @31|t+0#0000001#ffd7ff255|w|o| @4| +0#0000000#0000001| +0&#ffffff0@32
|6| @31|t+0#0000001#ffd7ff255|h|r|e@1| @2| +0#0000000#a8a8a8255|
+0&#ffffff0@32
|7| @31|f+0#0000001#ffd7ff255|o|u|r| @3| +0#0000000#a8a8a8255| +0&#ffffff0@32
|8| @73
*** ../vim-8.1.1596/src/testdir/dumps/Test_popupwin_scroll_2.dump
2019-06-25 05:15:15.188891898 +0200
--- src/testdir/dumps/Test_popupwin_scroll_2.dump 2019-06-26
03:17:04.337905018 +0200
***************
*** 1,7 ****
>1+0&#ffffff0| @73
|2| @73
|3| @73
! |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
|7| @31|f+0#0000001#ffd7ff255|i|v|e| @3| +0#0000000#a8a8a8255| +0&#ffffff0@32
--- 1,7 ----
>1+0&#ffffff0| @73
|2| @73
|3| @73
! |4| @31|t+0#0000001#ffd7ff255|w|o| @4| +0#0000000#0000001| +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
|7| @31|f+0#0000001#ffd7ff255|i|v|e| @3| +0#0000000#a8a8a8255| +0&#ffffff0@32
*** ../vim-8.1.1596/src/testdir/dumps/Test_popupwin_scroll_3.dump
2019-06-25 05:15:15.188891898 +0200
--- src/testdir/dumps/Test_popupwin_scroll_3.dump 2019-06-26
03:17:05.385900981 +0200
***************
*** 3,9 ****
|3| @73
|4| @31|s+0#0000001#ffd7ff255|i|x| @4| +0#0000000#a8a8a8255| +0&#ffffff0@32
|5| @31|s+0#0000001#ffd7ff255|e|v|e|n| @2| +0#0000000#a8a8a8255|
+0&#ffffff0@32
! |6| @31|e+0#0000001#ffd7ff255|i|g|h|t| @2| +0#0000000#a8a8a8255|
+0&#ffffff0@32
|7| @31|n+0#0000001#ffd7ff255|i|n|e| @3| +0#0000000#0000001| +0&#ffffff0@32
|8| @73
|9| @73
--- 3,9 ----
|3| @73
|4| @31|s+0#0000001#ffd7ff255|i|x| @4| +0#0000000#a8a8a8255| +0&#ffffff0@32
|5| @31|s+0#0000001#ffd7ff255|e|v|e|n| @2| +0#0000000#a8a8a8255|
+0&#ffffff0@32
! |6| @31|e+0#0000001#ffd7ff255|i|g|h|t| @2| +0#0000000#0000001| +0&#ffffff0@32
|7| @31|n+0#0000001#ffd7ff255|i|n|e| @3| +0#0000000#0000001| +0&#ffffff0@32
|8| @73
|9| @73
*** ../vim-8.1.1596/src/testdir/dumps/Test_popupwin_scroll_5.dump
2019-06-26 03:39:20.685781019 +0200
--- src/testdir/dumps/Test_popupwin_scroll_5.dump 2019-06-26
03:36:39.802303783 +0200
***************
*** 0 ****
--- 1,10 ----
+ >1+0&#ffffff0| @73
+ |2| @73
+ |3| @73
+ |4| @31|o+0#0000001#ffd7ff255|n|e| @4| +0#0000000#0000001| +0&#ffffff0@32
+ |5| @31|t+0#0000001#ffd7ff255|w|o| @4| +0#0000000#0000001| +0&#ffffff0@32
+ |6| @31|t+0#0000001#ffd7ff255|h|r|e@1| @2| +0#0000000#a8a8a8255|
+0&#ffffff0@32
+ |7| @31|f+0#0000001#ffd7ff255|o|u|r| @3| +0#0000000#a8a8a8255| +0&#ffffff0@32
+ |8| @73
+ |9| @73
+ |:|c|a|l@1| |S|c|r|o|l@1|U|p|(|)| @40|1|,|1| @10|T|o|p|
*** ../vim-8.1.1596/src/testdir/dumps/Test_popupwin_scroll_6.dump
2019-06-26 03:39:20.689781008 +0200
--- src/testdir/dumps/Test_popupwin_scroll_6.dump 2019-06-26
03:36:40.850300447 +0200
***************
*** 0 ****
--- 1,10 ----
+ >1+0&#ffffff0| @73
+ |2| @73
+ |3| @73
+ |4| @31|t+0#0000001#ffd7ff255|h|r|e@1| @2| +0#0000000#a8a8a8255|
+0&#ffffff0@32
+ |5| @31|f+0#0000001#ffd7ff255|o|u|r| @3| +0#0000000#0000001| +0&#ffffff0@32
+ |6| @31|f+0#0000001#ffd7ff255|i|v|e| @3| +0#0000000#0000001| +0&#ffffff0@32
+ |7| @31|s+0#0000001#ffd7ff255|i|x| @4| +0#0000000#a8a8a8255| +0&#ffffff0@32
+ |8| @73
+ |9| @73
+ |:|c|a|l@1| |S|c|r|o|l@1|D|o|w|n|(|)| @38|1|,|1| @10|T|o|p|
*** ../vim-8.1.1596/src/testdir/dumps/Test_popupwin_scroll_7.dump
2019-06-26 03:39:20.693780992 +0200
--- src/testdir/dumps/Test_popupwin_scroll_7.dump 2019-06-26
03:36:41.898297110 +0200
***************
*** 0 ****
--- 1,10 ----
+ >1+0&#ffffff0| @73
+ |2| @73
+ |3| @73
+ |4| @31|s+0#0000001#ffd7ff255|i|x| @4| +0#0000000#a8a8a8255| +0&#ffffff0@32
+ |5| @31|s+0#0000001#ffd7ff255|e|v|e|n| @2| +0#0000000#a8a8a8255|
+0&#ffffff0@32
+ |6| @31|e+0#0000001#ffd7ff255|i|g|h|t| @2| +0#0000000#0000001| +0&#ffffff0@32
+ |7| @31|n+0#0000001#ffd7ff255|i|n|e| @3| +0#0000000#0000001| +0&#ffffff0@32
+ |8| @73
+ |9| @73
+ |:|c|a|l@1| |S|c|r|o|l@1|D|o|w|n|(|)| @38|1|,|1| @10|T|o|p|
*** ../vim-8.1.1596/src/version.c 2019-06-26 01:03:49.489879814 +0200
--- src/version.c 2019-06-26 03:38:59.521850901 +0200
***************
*** 779,780 ****
--- 779,782 ----
{ /* Add new patch number below this line */
+ /**/
+ 1597,
/**/
--
MAN: Fetchez la vache!
GUARD: Quoi?
MAN: Fetchez la vache!
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/201906260141.x5Q1ffGK013063%40masaka.moolenaar.net.
For more options, visit https://groups.google.com/d/optout.