Patch 8.1.1450
Problem: Popup window positioning wrong when using padding or borders.
Solution: Fix computing the position.
Files: src/popupwin.c, src/testdir/test_popupwin.vim,
src/testdir/dumps/Test_popupwin_corners.dump
*** ../vim-8.1.1449/src/popupwin.c 2019-06-02 14:49:52.368891150 +0200
--- src/popupwin.c 2019-06-02 15:27:07.476956587 +0200
***************
*** 382,387 ****
--- 382,393 ----
int center_vert = FALSE;
int center_hor = FALSE;
int allow_adjust_left = !wp->w_popup_fixed;
+ int top_extra = wp->w_popup_border[0] +
wp->w_popup_padding[0];
+ int right_extra = wp->w_popup_border[1] +
wp->w_popup_padding[1];
+ int bot_extra = wp->w_popup_border[2] +
wp->w_popup_padding[2];
+ int left_extra = wp->w_popup_border[3] +
wp->w_popup_padding[3];
+ int extra_height = top_extra + bot_extra;
+ int extra_width = left_extra + right_extra;
wp->w_winrow = 0;
wp->w_wincol = 0;
***************
*** 474,481 ****
{
// Right aligned: move to the right if needed.
// No truncation, because that would change the height.
! if (wp->w_width < wp->w_wantcol)
! wp->w_wincol = wp->w_wantcol - wp->w_width;
}
if (wp->w_height <= 1)
--- 480,487 ----
{
// Right aligned: move to the right if needed.
// No truncation, because that would change the height.
! if (wp->w_width + extra_width < wp->w_wantcol)
! wp->w_wincol = wp->w_wantcol - (wp->w_width + extra_width);
}
if (wp->w_height <= 1)
***************
*** 492,500 ****
else if (wp->w_popup_pos == POPPOS_BOTRIGHT
|| wp->w_popup_pos == POPPOS_BOTLEFT)
{
! if (wp->w_height <= wp->w_wantline)
// bottom aligned: may move down
! wp->w_winrow = wp->w_wantline - wp->w_height;
else
// not enough space, make top aligned
wp->w_winrow = wp->w_wantline + 1;
--- 498,506 ----
else if (wp->w_popup_pos == POPPOS_BOTRIGHT
|| wp->w_popup_pos == POPPOS_BOTLEFT)
{
! if ((wp->w_height + extra_height) <= wp->w_wantline)
// bottom aligned: may move down
! wp->w_winrow = wp->w_wantline - (wp->w_height + extra_height);
else
// not enough space, make top aligned
wp->w_winrow = wp->w_wantline + 1;
*** ../vim-8.1.1449/src/testdir/test_popupwin.vim 2019-06-02
14:49:52.372891128 +0200
--- src/testdir/test_popupwin.vim 2019-06-02 15:27:28.196847514 +0200
***************
*** 175,180 ****
--- 175,229 ----
call delete('XtestPopup')
endfunc
+ func Test_popup_all_corners()
+ if !CanRunVimInTerminal()
+ return
+ endif
+ let lines =<< trim END
+ call setline(1, repeat([repeat('-', 60)], 15))
+ set so=0
+ normal 2G3|r#
+ let winid1 = popup_create(['first', 'second'], {
+ \ 'line': 'cursor+1',
+ \ 'col': 'cursor',
+ \ 'pos': 'topleft',
+ \ 'border': [],
+ \ 'padding': [],
+ \ })
+ normal 25|r@
+ let winid1 = popup_create(['First', 'SeconD'], {
+ \ 'line': 'cursor+1',
+ \ 'col': 'cursor',
+ \ 'pos': 'topright',
+ \ 'border': [],
+ \ 'padding': [],
+ \ })
+ normal 9G29|r%
+ let winid1 = popup_create(['fiRSt', 'seCOnd'], {
+ \ 'line': 'cursor-1',
+ \ 'col': 'cursor',
+ \ 'pos': 'botleft',
+ \ 'border': [],
+ \ 'padding': [],
+ \ })
+ normal 51|r&
+ let winid1 = popup_create(['FIrsT', 'SEcoND'], {
+ \ 'line': 'cursor-1',
+ \ 'col': 'cursor',
+ \ 'pos': 'botright',
+ \ 'border': [],
+ \ 'padding': [],
+ \ })
+ END
+ call writefile(lines, 'XtestPopupCorners')
+ let buf = RunVimInTerminal('-S XtestPopupCorners', {'rows': 12})
+ call VerifyScreenDump(buf, 'Test_popupwin_corners', {})
+
+ " clean up
+ call StopVimInTerminal(buf)
+ call delete('XtestPopupCorners')
+ endfunc
+
func Test_win_execute_closing_curwin()
split
let winid = popup_create('some text', {})
*** ../vim-8.1.1449/src/testdir/dumps/Test_popupwin_corners.dump
2019-06-02 15:33:19.878990668 +0200
--- src/testdir/dumps/Test_popupwin_corners.dump 2019-06-02
15:24:00.245939605 +0200
***************
*** 0 ****
--- 1,12 ----
+ |-+0&#ffffff0@59| @14
+ |-@1|#|-@20|@|-@34| @14
+
|-@1|╔+0#0000001#ffd7ff255|═@7|╗|-+0#0000000#ffffff0@2|╔+0#0000001#ffd7ff255|═@7|╗|-+0#0000000#ffffff0@2|╔+0#0000001#ffd7ff255|═@7|╗|-+0#0000000#ffffff0@2|╔+0#0000001#ffd7ff255|═@7|╗|-+0#0000000#ffffff0@8|
@14
+ |-@1|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255|
@7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255|
@7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@8|
@14
+ |-@1|║+0#0000001#ffd7ff255| |f|i|r|s|t|
@1|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |F|i|r|s|t|
@1|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |f|i|R|S|t|
@1|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |F|I|r|s|T|
@1|║|-+0#0000000#ffffff0@8| @14
+ |-@1|║+0#0000001#ffd7ff255| |s|e|c|o|n|d|
|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |S|e|c|o|n|D|
|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |s|e|C|O|n|d|
|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |S|E|c|o|N|D|
|║|-+0#0000000#ffffff0@8| @14
+ |-@1|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255|
@7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255|
@7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@8|
@14
+
|-@1|╚+0#0000001#ffd7ff255|═@7|╝|-+0#0000000#ffffff0@2|╚+0#0000001#ffd7ff255|═@7|╝|-+0#0000000#ffffff0@2|╚+0#0000001#ffd7ff255|═@7|╝|-+0#0000000#ffffff0@2|╚+0#0000001#ffd7ff255|═@7|╝|-+0#0000000#ffffff0@8|
@14
+ |-@27|%|-@20>&|-@8| @14
+ |-@59| @14
+ |-@59| @14
+ @57|9|,|5|1| @9|T|o|p|
*** ../vim-8.1.1449/src/version.c 2019-06-02 14:49:52.372891128 +0200
--- src/version.c 2019-06-02 15:33:07.663055316 +0200
***************
*** 769,770 ****
--- 769,772 ----
{ /* Add new patch number below this line */
+ /**/
+ 1450,
/**/
--
>From "know your smileys":
:^[/ mean-smiley-with-cigarette
/// 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/201906021335.x52DZKZh028868%40masaka.moolenaar.net.
For more options, visit https://groups.google.com/d/optout.