changeset 18629:15fe2bd478b0 v8.1.2307

patch 8.1.2307: positioning popup doesn't work for buffer-local textprop Commit: https://github.com/vim/vim/commit/a37cb55da6ba44c5e85a22b03a91e1b663aceddf Author: Bram Moolenaar <Bram@vim.org> Date: Sat Nov 16 20:03:31 2019 +0100 patch 8.1.2307: positioning popup doesn't work for buffer-local textprop Problem: Positioning popup doesn't work for buffer-local textprop. Solution: Make it work. (closes https://github.com/vim/vim/issues/5225)
author Bram Moolenaar <Bram@vim.org>
date Sat, 16 Nov 2019 20:15:03 +0100
parents cab958d39c1c
children 44d77ef80e78
files src/popupwin.c src/testdir/test_popupwin_textprop.vim src/version.c
diffstat 3 files changed, 15 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -452,24 +452,22 @@ apply_move_options(win_T *wp, dict_T *d)
 	wp->w_popup_prop_type = 0;
 	if (*str != NUL)
 	{
-	    nr = find_prop_type_id(str, wp->w_buffer);
+	    wp->w_popup_prop_win = curwin;
+	    di = dict_find(d, (char_u *)"textpropwin", -1);
+	    if (di != NULL)
+	    {
+		wp->w_popup_prop_win = find_win_by_nr_or_id(&di->di_tv);
+		if (!win_valid(wp->w_popup_prop_win))
+		    wp->w_popup_prop_win = curwin;
+	    }
+
+	    nr = find_prop_type_id(str, wp->w_popup_prop_win->w_buffer);
 	    if (nr <= 0)
 		nr = find_prop_type_id(str, NULL);
 	    if (nr <= 0)
 		semsg(_(e_invarg2), str);
 	    else
-	    {
 		wp->w_popup_prop_type = nr;
-		wp->w_popup_prop_win = curwin;
-
-		di = dict_find(d, (char_u *)"textpropwin", -1);
-		if (di != NULL)
-		{
-		    wp->w_popup_prop_win = find_win_by_nr_or_id(&di->di_tv);
-		    if (win_valid(wp->w_popup_prop_win))
-			wp->w_popup_prop_win = curwin;
-		}
-	    }
 	}
     }
 
--- a/src/testdir/test_popupwin_textprop.vim
+++ b/src/testdir/test_popupwin_textprop.vim
@@ -13,10 +13,11 @@ func Test_textprop_popup()
 	50
 	normal zz
 	set scrolloff=0
-	call prop_type_add('popupMarker', #{highlight: 'DiffAdd'})
+	call prop_type_add('popupMarker', #{highlight: 'DiffAdd', bufnr: bufnr('%')})
 	call prop_add(50, 11, #{
 		\ length: 7,
 		\ type: 'popupMarker',
+		\ bufnr: bufnr('%'),
 		\ })
 	let winid = popup_create('the text', #{
 	      \ pos: 'botleft', 
@@ -68,6 +69,7 @@ func Test_textprop_popup_corners()
 	let winid = popup_create('bottom left', #{
 	      \ pos: 'botleft', 
 	      \ textprop: 'popupMarker',
+	      \ textpropwin: win_getid(),
 	      \ padding: [0,1,0,1],
 	      \ })
 	let winid = popup_create('bottom right', #{
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2307,
+/**/
     2306,
 /**/
     2305,