1
0
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:
Bram Moolenaar
2021-02-10 14:56:11 +01:00
parent 4223d43c0f
commit 82db31c104
6 changed files with 81 additions and 0 deletions

View File

@@ -1193,6 +1193,12 @@ popup_adjust_position(win_T *wp)
textpos2screenpos(prop_win, &pos, &screen_row,
&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
|| wp->w_popup_pos == POPPOS_TOPRIGHT)
// below the text

View 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

View 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

View 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

View File

@@ -3836,4 +3836,47 @@ func Test_popup_setoptions_other_tab()
call prop_type_delete('textprop')
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

View File

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