patch 8.1.1945: popup window "firstline" cannot be reset
Problem: Popup window "firstline" cannot be reset.
Solution: Allow for setting "firstline" to zero. Fix that the text jumps to
the top when using win_execute(). (closes #4876)
diff --git a/src/testdir/dumps/Test_popupwin_scroll_5.dump b/src/testdir/dumps/Test_popupwin_scroll_5.dump
index 0437d45..fa7ee30 100644
--- a/src/testdir/dumps/Test_popupwin_scroll_5.dump
+++ b/src/testdir/dumps/Test_popupwin_scroll_5.dump
@@ -1,10 +1,10 @@
>1+0&#ffffff0| @73
|2| @73
|3| @73
-|4| @31|o+0#0000001#ffd7ff255|n|e| @4| +0#0000000#4040ff13| +0&#ffffff0@32
-|5| @31|t+0#0000001#ffd7ff255|w|o| @4| +0#0000000#4040ff13| +0&#ffffff0@32
-|6| @31|t+0#0000001#ffd7ff255|h|r|e@1| @2| +0#0000000#ff404010| +0&#ffffff0@32
-|7| @31|f+0#0000001#ffd7ff255|o|u|r| @3| +0#0000000#ff404010| +0&#ffffff0@32
+|4| @31|f+0#0000001#ffd7ff255|o|u|r| @3| +0#0000000#ff404010| +0&#ffffff0@32
+|5| @31|f+0#0000001#ffd7ff255|i|v|e| @3| +0#0000000#4040ff13| +0&#ffffff0@32
+|6| @31|s+0#0000001#ffd7ff255|i|x| @4| +0#0000000#4040ff13| +0&#ffffff0@32
+|7| @31|s+0#0000001#ffd7ff255|e|v|e|n| @2| +0#0000000#ff404010| +0&#ffffff0@32
|8| @73
|9| @73
|:|c|a|l@1| |S|c|r|o|l@1|U|p|(|)| @40|1|,|1| @10|T|o|p|
diff --git a/src/testdir/dumps/Test_popupwin_scroll_6.dump b/src/testdir/dumps/Test_popupwin_scroll_6.dump
index a0b5988..1ee91b1 100644
--- a/src/testdir/dumps/Test_popupwin_scroll_6.dump
+++ b/src/testdir/dumps/Test_popupwin_scroll_6.dump
@@ -1,10 +1,10 @@
>1+0&#ffffff0| @73
|2| @73
|3| @73
-|4| @31|t+0#0000001#ffd7ff255|h|r|e@1| @2| +0#0000000#ff404010| +0&#ffffff0@32
-|5| @31|f+0#0000001#ffd7ff255|o|u|r| @3| +0#0000000#4040ff13| +0&#ffffff0@32
-|6| @31|f+0#0000001#ffd7ff255|i|v|e| @3| +0#0000000#4040ff13| +0&#ffffff0@32
-|7| @31|s+0#0000001#ffd7ff255|i|x| @4| +0#0000000#ff404010| +0&#ffffff0@32
+|4| @31|s+0#0000001#ffd7ff255|i|x| @4| +0#0000000#ff404010| +0&#ffffff0@32
+|5| @31|s+0#0000001#ffd7ff255|e|v|e|n| @2| +0#0000000#ff404010| +0&#ffffff0@32
+|6| @31|e+0#0000001#ffd7ff255|i|g|h|t| @2| +0#0000000#4040ff13| +0&#ffffff0@32
+|7| @31|n+0#0000001#ffd7ff255|i|n|e| @3| +0#0000000#4040ff13| +0&#ffffff0@32
|8| @73
|9| @73
|:|c|a|l@1| |S|c|r|o|l@1|D|o|w|n|(|)| @38|1|,|1| @10|T|o|p|
diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim
index 9471857..d713086 100644
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -333,6 +333,36 @@
call assert_equal(3, popup_getoptions(winid).firstline)
call popup_setoptions(winid, #{firstline: 1})
call assert_equal(1, popup_getoptions(winid).firstline)
+ call popup_close(winid)
+
+ let winid = popup_create(['xxx']->repeat(50), #{
+ \ maxheight: 3,
+ \ firstline: 11,
+ \ })
+ redraw
+ call assert_equal(11, popup_getoptions(winid).firstline)
+ call assert_equal(11, popup_getpos(winid).firstline)
+
+ " Normal command changes what is displayed but not "firstline"
+ call win_execute(winid, "normal! \<c-y>")
+ call assert_equal(11, popup_getoptions(winid).firstline)
+ call assert_equal(10, popup_getpos(winid).firstline)
+
+ " Making some property change applies "firstline" again
+ call popup_setoptions(winid, #{line: 4})
+ call assert_equal(11, popup_getoptions(winid).firstline)
+ call assert_equal(11, popup_getpos(winid).firstline)
+
+ " Remove "firstline" property and scroll
+ call popup_setoptions(winid, #{firstline: 0})
+ call win_execute(winid, "normal! \<c-y>")
+ call assert_equal(0, popup_getoptions(winid).firstline)
+ call assert_equal(10, popup_getpos(winid).firstline)
+
+ " Making some property change has no side effect
+ call popup_setoptions(winid, #{line: 3})
+ call assert_equal(0, popup_getoptions(winid).firstline)
+ call assert_equal(10, popup_getpos(winid).firstline)
call popup_close(winid)
endfunc
@@ -1678,7 +1708,7 @@
call term_sendkeys(buf, ":\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_scroll_4', {})
- call term_sendkeys(buf, ":call popup_setoptions(winid, #{scrollbarhighlight: 'ScrollBar', thumbhighlight: 'ScrollThumb'})\<CR>")
+ call term_sendkeys(buf, ":call popup_setoptions(winid, #{scrollbarhighlight: 'ScrollBar', thumbhighlight: 'ScrollThumb', firstline: 5})\<CR>")
call term_sendkeys(buf, ":call ScrollUp()\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_scroll_5', {})