forked from aniani/vim
patch 8.2.2491: popup window for text property may show in first screen line
Problem: Popup window for text property may show in first screen line.
Solution: If the text position is invisible do not show the popup window.
(closes #7807)
This commit is contained in:
@@ -1193,6 +1193,12 @@ popup_adjust_position(win_T *wp)
|
|||||||
textpos2screenpos(prop_win, &pos, &screen_row,
|
textpos2screenpos(prop_win, &pos, &screen_row,
|
||||||
&screen_scol, &screen_ccol, &screen_ecol);
|
&screen_scol, &screen_ccol, &screen_ecol);
|
||||||
|
|
||||||
|
if (screen_scol == 0)
|
||||||
|
{
|
||||||
|
// position is off screen, make the width zero to hide it.
|
||||||
|
wp->w_width = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (wp->w_popup_pos == POPPOS_TOPLEFT
|
if (wp->w_popup_pos == POPPOS_TOPLEFT
|
||||||
|| wp->w_popup_pos == POPPOS_TOPRIGHT)
|
|| wp->w_popup_pos == POPPOS_TOPRIGHT)
|
||||||
// below the text
|
// below the text
|
||||||
|
|||||||
10
src/testdir/dumps/Test_popup_prop_not_visible_01.dump
Normal file
10
src/testdir/dumps/Test_popup_prop_not_visible_01.dump
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
| +2&#ffffff0|2+2#e000e06&|++2#0000000&| |[|N|o| |N|a|m|e|]| | +1&&@60
|
||||||
|
| +0&&@42||+1&&> +0&&@30
|
||||||
|
|~+0#4040ff13&| @41||+1#0000000&|s+0&&|o|m|e| |t|e|x|t|a+0#ffffff16#e000002|t@1|a|c|h|e|d| |t|o| |"|s|o|m|e|"| +0#0000000#ffffff0@3
|
||||||
|
|~+0#4040ff13&| @41||+1#0000000&| +0&&@30
|
||||||
|
|~+0#4040ff13&| @41||+1#0000000&|o+0&&|t|h|e|r| |t|e|x|t|a+0#ffffff16#e000002|t@1|a|c|h|e|d| |t|o| |"|o|t|h|e|r|"| +0#0000000#ffffff0@1
|
||||||
|
|~+0#4040ff13&| @41||+1#0000000&|~+0#4040ff13&| @29
|
||||||
|
|~| @41||+1#0000000&|~+0#4040ff13&| @29
|
||||||
|
|~| @41||+1#0000000&|~+0#4040ff13&| @29
|
||||||
|
|[+1#0000000&|N|o| |N|a|m|e|]| @15|0|,|0|-|1| @9|A|l@1| |[+3&&|N|o| |N|a|m|e|]| |[|+|]| @2|1|,|0|-|1| @6|A|l@1
|
||||||
|
| +0&&@74
|
||||||
10
src/testdir/dumps/Test_popup_prop_not_visible_02.dump
Normal file
10
src/testdir/dumps/Test_popup_prop_not_visible_02.dump
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
| +2&#ffffff0|2+2#e000e06&|++2#0000000&| |[|N|o| |N|a|m|e|]| | +1&&@60
|
||||||
|
| +0&&@56||+1&&> +0&&@16
|
||||||
|
|~+0#4040ff13&| @55||+1#0000000&|s+0&&|o|m|e| |t|e|x|t|a+0#ffffff16#e000002|t@1|a|c|h|e|d
|
||||||
|
|~+0#4040ff13#ffffff0| @55||+1#0000000&| +0&&@16
|
||||||
|
|~+0#4040ff13&| @54|a+0#ffffff16#e000002|t@1|a|c|h|e|d| |t|o| |"|o|t|h|e|r|"
|
||||||
|
|~+0#4040ff13#ffffff0| @55||+1#0000000&|~+0#4040ff13&| @15
|
||||||
|
|~| @55||+1#0000000&|~+0#4040ff13&| @15
|
||||||
|
|~| @55||+1#0000000&|~+0#4040ff13&| @15
|
||||||
|
|[+1#0000000&|N|o| |N|a|m|e|]| @29|0|,|0|-|1| @9|A|l@1| |<+3&&|m|e|]| |[|+|]| |1|,|0|-|1| @2
|
||||||
|
|:+0&&|v|e|r|t| |r|e|s|i|z|e| |-|1|4| @58
|
||||||
10
src/testdir/dumps/Test_popup_prop_not_visible_03.dump
Normal file
10
src/testdir/dumps/Test_popup_prop_not_visible_03.dump
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
| +2&#ffffff0|2+2#e000e06&|++2#0000000&| |[|N|o| |N|a|m|e|]| | +1&&@60
|
||||||
|
| +0&&@64||+1&&> +0&&@8
|
||||||
|
|~+0#4040ff13&| @63||+1#0000000&|s+0&&|o|m|e| |t|e|x|t
|
||||||
|
|~+0#4040ff13&| @63||+1#0000000&| +0&&@8
|
||||||
|
|~+0#4040ff13&| @63||+1#0000000&|o+0&&|t|h|e|r| |t|e|x
|
||||||
|
|~+0#4040ff13&| @63||+1#0000000&|~+0#4040ff13&| @7
|
||||||
|
|~| @63||+1#0000000&|~+0#4040ff13&| @7
|
||||||
|
|~| @63||+1#0000000&|~+0#4040ff13&| @7
|
||||||
|
|[+1#0000000&|N|o| |N|a|m|e|]| @37|0|,|0|-|1| @9|A|l@1| |<+3&&|[|+|]| |1|,|0|-
|
||||||
|
|:+0&&|v|e|r|t| |r|e|s|i|z|e| |-|8| @59
|
||||||
@@ -3836,4 +3836,47 @@ func Test_popup_setoptions_other_tab()
|
|||||||
call prop_type_delete('textprop')
|
call prop_type_delete('textprop')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_popup_prop_not_visible()
|
||||||
|
CheckScreendump
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
set nowrap stal=2
|
||||||
|
rightbelow :31vnew
|
||||||
|
setline(1, ['', 'some text', '', 'other text'])
|
||||||
|
prop_type_add('someprop', {})
|
||||||
|
prop_add(2, 9, {type: 'someprop', length: 5})
|
||||||
|
popup_create('attached to "some"', {
|
||||||
|
textprop: 'someprop',
|
||||||
|
highlight: 'ErrorMsg',
|
||||||
|
line: -1,
|
||||||
|
wrap: false,
|
||||||
|
fixed: true,
|
||||||
|
})
|
||||||
|
prop_type_add('otherprop', {})
|
||||||
|
prop_add(4, 10, {type: 'otherprop', length: 5})
|
||||||
|
popup_create('attached to "other"', {
|
||||||
|
textprop: 'otherprop',
|
||||||
|
highlight: 'ErrorMsg',
|
||||||
|
line: -1,
|
||||||
|
wrap: false,
|
||||||
|
fixed: false,
|
||||||
|
})
|
||||||
|
END
|
||||||
|
call writefile(lines, 'XtestPropNotVisble')
|
||||||
|
let buf = RunVimInTerminal('-S XtestPropNotVisble', #{rows: 10})
|
||||||
|
call VerifyScreenDump(buf, 'Test_popup_prop_not_visible_01', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, ":vert resize -14\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_popup_prop_not_visible_02', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, ":vert resize -8\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_popup_prop_not_visible_03', {})
|
||||||
|
|
||||||
|
" clean up
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
call delete('XtestPropNotVisble')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2
|
" vim: shiftwidth=2 sts=2
|
||||||
|
|||||||
@@ -750,6 +750,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 */
|
||||||
|
/**/
|
||||||
|
2491,
|
||||||
/**/
|
/**/
|
||||||
2490,
|
2490,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user