mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -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:
@@ -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
|
||||||
|
10
src/testdir/dumps/Test_popupwin_term_01.dump
Normal file
10
src/testdir/dumps/Test_popupwin_term_01.dump
Normal 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
|
10
src/testdir/dumps/Test_popupwin_term_02.dump
Normal file
10
src/testdir/dumps/Test_popupwin_term_02.dump
Normal 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
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user