0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.2.1193: terminal window not redrawn when dragging a popup window

Problem:    Terminal window not redrawn when dragging a popup window over it.
Solution:   Redraw terminal window. (fixes #6438)
This commit is contained in:
Bram Moolenaar
2020-07-12 19:24:10 +02:00
parent b898a029b0
commit 35910f2d54
5 changed files with 76 additions and 13 deletions

View File

@@ -3504,22 +3504,29 @@ may_update_popup_mask(int type)
wp = mouse_find_win(&line_cp, &col_cp, IGNORE_POPUP); wp = mouse_find_win(&line_cp, &col_cp, IGNORE_POPUP);
if (wp != NULL) if (wp != NULL)
{ {
if (wp != prev_wp) // A terminal window needs to be redrawn.
{ if (bt_terminal(wp->w_buffer))
vim_memset(plines_cache, 0, sizeof(int) * Rows); redraw_win_later(wp, NOT_VALID);
prev_wp = wp;
}
if (line_cp >= wp->w_height)
// In (or below) status line
wp->w_redr_status = TRUE;
else else
{ {
// compute the position in the buffer line from if (wp != prev_wp)
// the position in the window {
mouse_comp_pos(wp, &line_cp, &col_cp, vim_memset(plines_cache, 0,
sizeof(int) * Rows);
prev_wp = wp;
}
if (line_cp >= wp->w_height)
// In (or below) status line
wp->w_redr_status = TRUE;
else
{
// compute the position in the buffer line
// from the position in the window
mouse_comp_pos(wp, &line_cp, &col_cp,
&lnum, plines_cache); &lnum, plines_cache);
redrawWinline(wp, lnum); redrawWinline(wp, lnum);
}
} }
// This line is going to be redrawn, no need to // This line is going to be redrawn, no need to

View File

@@ -0,0 +1,10 @@
|$+0&#ffffff0| @73
@75
@34|╔+0#0000001#ffd7ff255|═@3|╗| +0#0000000#ffffff0@34
@34|║+0#0000001#ffd7ff255|1@3|║| +0#0000000#ffffff0@34
|!+0#ffffff16#00e0003|/|b|i|n|/|s|h| |[|r|u|n@1|i|n|g|]| @15|║+0#0000001#ffd7ff255|2@3|║| +0#ffffff16#00e0003@34
> +0#0000000#ffffff0@33|╚+0#0000001#ffd7ff255|═@3|⇲| +0#0000000#ffffff0@34
|~+0#4040ff13&| @73
|~| @73
|[+3#0000000&|N|o| |N|a|m|e|]| @65
| +0&&@74

View File

@@ -0,0 +1,10 @@
|$+0&#ffffff0| @73
@75
@14|╔+0#0000001#ffd7ff255|═@3|╗| +0#0000000#ffffff0@54
@14|║+0#0000001#ffd7ff255|1@3|║| +0#0000000#ffffff0@54
|!+0#ffffff16#00e0003|/|b|i|n|/|s|h| |[|r|u|n@1|║+0#0000001#ffd7ff255|2@3|║| +0#ffffff16#00e0003@54
> +0#0000000#ffffff0@13|╚+0#0000001#ffd7ff255|═@3|⇲| +0#0000000#ffffff0@54
|~+0#4040ff13&| @73
|~| @73
|[+3#0000000&|N|o| |N|a|m|e|]| @65
|:+0&&|c|a|l@1| |D|r|a|g|i|t|(|)| @60

View File

@@ -577,6 +577,40 @@ func Test_popup_drag()
call delete('XtestPopupDrag') call delete('XtestPopupDrag')
endfunc endfunc
func Test_popup_drag_termwin()
CheckUnix
CheckScreendump
CheckFeature terminal
" create a popup that covers the terminal window
let lines =<< trim END
set shell=/bin/sh noruler
terminal
$wincmd w
let winid = popup_create(['1111', '2222'], #{
\ drag: 1,
\ resize: 1,
\ border: [],
\ line: 3,
\ })
func Dragit()
call feedkeys("\<F3>\<LeftMouse>\<F4>\<LeftDrag>\<LeftRelease>", "xt")
endfunc
map <silent> <F3> :call test_setmouse(3, &columns / 2)<CR>
map <silent> <F4> :call test_setmouse(3, &columns / 2 - 20)<CR>
END
call writefile(lines, 'XtestPopupTerm')
let buf = RunVimInTerminal('-S XtestPopupTerm', #{rows: 10})
call VerifyScreenDump(buf, 'Test_popupwin_term_01', {})
call term_sendkeys(buf, ":call Dragit()\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_term_02', {})
" clean up
call StopVimInTerminal(buf)
call delete('XtestPopupTerm')
endfunc
func Test_popup_close_with_mouse() func Test_popup_close_with_mouse()
CheckScreendump CheckScreendump

View File

@@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1193,
/**/ /**/
1192, 1192,
/**/ /**/