# HG changeset patch # User Bram Moolenaar # Date 1566651604 -7200 # Node ID 9513821d9d8f1ec61ec69fd9b77c86e7d972b1cb # Parent 0408953949ba67d7daa3e724447d4cb3f305cd9d patch 8.1.1917: non-current window is not redrawn when moving popup Commit: https://github.com/vim/vim/commit/356375fbf882535b5a5980d175c11abfa446a7cb Author: Bram Moolenaar Date: Sat Aug 24 14:46:29 2019 +0200 patch 8.1.1917: non-current window is not redrawn when moving popup Problem: Non-current window is not redrawn when moving popup. (Ben Jackson) Solution: Redraw all windows under a popup. (closes https://github.com/vim/vim/issues/4860) diff --git a/src/popupwin.c b/src/popupwin.c --- a/src/popupwin.c +++ b/src/popupwin.c @@ -1219,7 +1219,7 @@ popup_adjust_position(win_T *wp) wp->w_popup_last_changedtick = CHANGEDTICK(wp->w_buffer); // Need to update popup_mask if the position or size changed. - // And redraw windows that were behind the popup. + // And redraw windows and statuslines that were behind the popup. if (org_winrow != wp->w_winrow || org_wincol != wp->w_wincol || org_leftcol != wp->w_leftcol @@ -1227,8 +1227,9 @@ popup_adjust_position(win_T *wp) || org_width != wp->w_width || org_height != wp->w_height) { - redraw_all_later(VALID); redraw_win_later(wp, NOT_VALID); + redraw_all_later(SOME_VALID); + status_redraw_all(); if (wp->w_popup_flags & POPF_ON_CMDLINE) clear_cmdline = TRUE; popup_mask_refresh = TRUE; diff --git a/src/testdir/dumps/Test_popupwin_drag_01.dump b/src/testdir/dumps/Test_popupwin_drag_01.dump --- a/src/testdir/dumps/Test_popupwin_drag_01.dump +++ b/src/testdir/dumps/Test_popupwin_drag_01.dump @@ -1,10 +1,10 @@ ->1+0&#ffffff0| @73 -|2| @73 -|3| @73 -|4| @73 -|5| @73 -|6| @31|╔+0#0000001#ffd7ff255|═@5|╗| +0#0000000#ffffff0@33 -|7| @31|║+0#0000001#ffd7ff255|1@3| @1|║| +0#0000000#ffffff0@33 -|8| @31|║+0#0000001#ffd7ff255|2@5|║| +0#0000000#ffffff0@33 -|9| @31|║+0#0000001#ffd7ff255|3@4| |║| +0#0000000#ffffff0@33 -@33|╚+0#0000001#ffd7ff255|═@5|⇲| +0#0000000#ffffff0@15|1|,|1| @10|T|o|p| +>1+0&#ffffff0| @35||+1&&|1+0&&| @35 +|2| @35||+1&&|2+0&&| @35 +|3| @35||+1&&|3+0&&| @35 +|4| @35||+1&&|4+0&&| @35 +|[+3&&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @11|T|o|p| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @11|T|o|p +|1+0&&| @31|╔+0#0000001#ffd7ff255|═@5|╗| +0#0000000#ffffff0@33 +|2| @31|║+0#0000001#ffd7ff255|1@3| @1|║| +0#0000000#ffffff0@33 +|3| @31|║+0#0000001#ffd7ff255|2@5|║| +0#0000000#ffffff0@33 +|[+1&&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @10|║+0#0000001#ffd7ff255|3@4| |║| +1#0000000#ffffff0|N|a|m|e|]| |[|+|]| @5|1|,|1| @11|T|o|p +| +0&&@32|╚+0#0000001#ffd7ff255|═@5|⇲| +0#0000000#ffffff0@33 diff --git a/src/testdir/dumps/Test_popupwin_drag_02.dump b/src/testdir/dumps/Test_popupwin_drag_02.dump --- a/src/testdir/dumps/Test_popupwin_drag_02.dump +++ b/src/testdir/dumps/Test_popupwin_drag_02.dump @@ -1,10 +1,10 @@ ->1+0&#ffffff0| @73 -|2| @31|╔+0#0000001#ffd7ff255|═@5|╗| +0#0000000#ffffff0@33 -|3| @31|║+0#0000001#ffd7ff255|1@3| @1|║| +0#0000000#ffffff0@33 -|4| @31|║+0#0000001#ffd7ff255|2@5|║| +0#0000000#ffffff0@33 -|5| @31|║+0#0000001#ffd7ff255|3@4| |║| +0#0000000#ffffff0@33 -|6| @31|╚+0#0000001#ffd7ff255|═@5|⇲| +0#0000000#ffffff0@33 -|7| @73 -|8| @73 -|9| @73 -@57|1|,|1| @10|T|o|p| +>1+0&#ffffff0| @35||+1&&|1+0&&| @35 +|2| @11|╔+0#0000001#ffd7ff255|═@5|╗| +0#0000000#ffffff0@15||+1&&|2+0&&| @35 +|3| @11|║+0#0000001#ffd7ff255|1@3| @1|║| +0#0000000#ffffff0@15||+1&&|3+0&&| @35 +|4| @11|║+0#0000001#ffd7ff255|2@5|║| +0#0000000#ffffff0@15||+1&&|4+0&&| @35 +|[+3&&|N|o| |N|a|m|e|]| |[|+|]|║+0#0000001#ffd7ff255|3@4| |║|1+3#0000000#ffffff0| @11|T|o|p| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @11|T|o|p +|1+0&&| @11|╚+0#0000001#ffd7ff255|═@5|⇲| +0#0000000#ffffff0@15||+1&&|1+0&&| @35 +|2| @35||+1&&|2+0&&| @35 +|3| @35||+1&&|3+0&&| @35 +|[+1&&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @11|T|o|p| |[|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @11|T|o|p +| +0&&@74 diff --git a/src/testdir/dumps/Test_popupwin_drag_03.dump b/src/testdir/dumps/Test_popupwin_drag_03.dump --- a/src/testdir/dumps/Test_popupwin_drag_03.dump +++ b/src/testdir/dumps/Test_popupwin_drag_03.dump @@ -1,10 +1,10 @@ ->1+0&#ffffff0| @73 -|2| @31|╔+0#0000001#ffd7ff255|═@9|╗| +0#0000000#ffffff0@29 -|3| @31|║+0#0000001#ffd7ff255|1@3| @5|║| +0#0000000#ffffff0@29 -|4| @31|║+0#0000001#ffd7ff255|2@5| @3|║| +0#0000000#ffffff0@29 -|5| @31|║+0#0000001#ffd7ff255|3@4| @4|║| +0#0000000#ffffff0@29 -|6| @31|║+0#0000001#ffd7ff255| +0#4040ff13&@9|║+0#0000001&| +0#0000000#ffffff0@29 -|7| @31|╚+0#0000001#ffd7ff255|═@9|⇲| +0#0000000#ffffff0@29 -|8| @73 -|9| @73 -|:|c|a|l@1| |R|e|s|i|z|e|(|)| @42|1|,|1| @10|T|o|p| +>1+0&#ffffff0| @35||+1&&|1+0&&| @35 +|2| @11|╔+0#0000001#ffd7ff255|═@9|╗| +0#0000000#ffffff0@11||+1&&|2+0&&| @35 +|3| @11|║+0#0000001#ffd7ff255|1@3| @5|║| +0#0000000#ffffff0@11||+1&&|3+0&&| @35 +|4| @11|║+0#0000001#ffd7ff255|2@5| @3|║| +0#0000000#ffffff0@11||+1&&|4+0&&| @35 +|[+3&&|N|o| |N|a|m|e|]| |[|+|]|║+0#0000001#ffd7ff255|3@4| @4|║| +3#0000000#ffffff0@8|T|o|p| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @11|T|o|p +|1+0&&| @11|║+0#0000001#ffd7ff255| +0#4040ff13&@9|║+0#0000001&| +0#0000000#ffffff0@11||+1&&|1+0&&| @35 +|2| @11|╚+0#0000001#ffd7ff255|═@9|⇲| +0#0000000#ffffff0@11||+1&&|2+0&&| @35 +|3| @35||+1&&|3+0&&| @35 +|[+1&&|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @11|T|o|p| |[|N|o| |N|a|m|e|]| |[|+|]| @5|1|,|1| @11|T|o|p +|:+0&&|c|a|l@1| |R|e|s|i|z|e|(|)| @60 diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim --- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -343,6 +343,11 @@ func Test_popup_drag() " create a popup that covers the command line let lines =<< trim END call setline(1, range(1, 20)) + split + vsplit + $wincmd w + vsplit + 1wincmd w let winid = popup_create(['1111', '222222', '33333'], #{ \ drag: 1, \ resize: 1, @@ -353,12 +358,12 @@ func Test_popup_drag() call feedkeys("\\\\\", "xt") endfunc map :call test_setmouse(&lines - 4, &columns / 2) - map :call test_setmouse(&lines - 8, &columns / 2) + map :call test_setmouse(&lines - 8, &columns / 2 - 20) func Resize() call feedkeys("\\\\\", "xt") endfunc - map :call test_setmouse(6, 41) - map :call test_setmouse(7, 45) + map :call test_setmouse(6, 21) + map :call test_setmouse(7, 25) END call writefile(lines, 'XtestPopupDrag') let buf = RunVimInTerminal('-S XtestPopupDrag', #{rows: 10}) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -762,6 +762,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1917, +/**/ 1916, /**/ 1915,