changeset 17819:1f74a3c600a3 v8.1.1906

patch 8.1.1906: info popup size is sometimes incorrect Commit: https://github.com/vim/vim/commit/c1f87c9a31e0c91f2d936661e1c4df8e12e19766 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Aug 21 19:33:16 2019 +0200 patch 8.1.1906: info popup size is sometimes incorrect Problem: Info popup size is sometimes incorrect. Solution: Compute the position and size after setting the content.
author Bram Moolenaar <Bram@vim.org>
date Wed, 21 Aug 2019 19:45:03 +0200
parents dd699e520d01
children f2422c9b0de7
files src/popupmnu.c src/version.c
diffstat 2 files changed, 51 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- a/src/popupmnu.c
+++ b/src/popupmnu.c
@@ -621,6 +621,47 @@ pum_redraw(void)
 #endif
 }
 
+#if defined(FEAT_TEXT_PROP) && defined(FEAT_QUICKFIX)
+    static void
+pum_position_info_popup(void)
+{
+    int col = pum_col + pum_width + 1;
+    int row = pum_row;
+    int botpos = POPPOS_BOTLEFT;
+
+    curwin->w_popup_pos = POPPOS_TOPLEFT;
+    if (Columns - col < 20 && Columns - col < pum_col)
+    {
+	col = pum_col - 1;
+	curwin->w_popup_pos = POPPOS_TOPRIGHT;
+	botpos = POPPOS_BOTRIGHT;
+	curwin->w_maxwidth = pum_col - 1;
+    }
+    else
+	curwin->w_maxwidth = Columns - col + 1;
+    curwin->w_maxwidth -= popup_extra_width(curwin);
+
+    row -= popup_top_extra(curwin);
+    if (curwin->w_popup_flags & POPF_INFO_MENU)
+    {
+	if (pum_row < pum_win_row)
+	{
+	    // menu above cursor line, align with bottom
+	    row += pum_height;
+	    curwin->w_popup_pos = botpos;
+	}
+	else
+	    // menu below cursor line, align with top
+	    row += 1;
+    }
+    else
+	// align with the selected item
+	row += pum_selected - pum_first + 1;
+
+    popup_set_wantpos_rowcol(curwin, row, col);
+}
+#endif
+
 /*
  * Set the index of the currently selected item.  The menu will scroll when
  * necessary.  When "n" is out of range don't scroll.
@@ -741,45 +782,6 @@ pum_set_selected(int n, int repeat UNUSE
 # endif
 		    )
 	    {
-# ifdef FEAT_TEXT_PROP
-		if (use_popup)
-		{
-		    int col = pum_col + pum_width + 1;
-		    int row = pum_row;
-		    int botpos = POPPOS_BOTLEFT;
-
-		    curwin->w_popup_pos = POPPOS_TOPLEFT;
-		    if (Columns - col < 20 && Columns - col < pum_col)
-		    {
-			col = pum_col - 1;
-			curwin->w_popup_pos = POPPOS_TOPRIGHT;
-			botpos = POPPOS_BOTRIGHT;
-			curwin->w_maxwidth = pum_col - 1;
-		    }
-		    else
-			curwin->w_maxwidth = Columns - col + 1;
-		    curwin->w_maxwidth -= popup_extra_width(curwin);
-
-		    row -= popup_top_extra(curwin);
-		    if (curwin->w_popup_flags & POPF_INFO_MENU)
-		    {
-			if (pum_row < pum_win_row)
-			{
-			    // menu above cursor line, align with bottom
-			    row += pum_height;
-			    curwin->w_popup_pos = botpos;
-			}
-			else
-			    // menu below cursor line, align with top
-			    row += 1;
-		    }
-		    else
-			// align with the selected item
-			row += pum_selected - pum_first + 1;
-
-		    popup_set_wantpos_rowcol(curwin, row, col);
-		}
-# endif
 		if (!resized
 			&& curbuf->b_nwindows == 1
 			&& curbuf->b_fname == NULL
@@ -859,9 +861,14 @@ pum_set_selected(int n, int repeat UNUSE
 			curwin->w_topline = curbuf->b_ml.ml_line_count;
 		    curwin->w_cursor.lnum = curwin->w_topline;
 		    curwin->w_cursor.col = 0;
-		    if (use_popup && win_valid(curwin_save))
-			redraw_win_later(curwin_save, SOME_VALID);
-
+# ifdef FEAT_TEXT_PROP
+		    if (use_popup)
+		    {
+			pum_position_info_popup();
+			if (win_valid(curwin_save))
+			    redraw_win_later(curwin_save, SOME_VALID);
+		    }
+# endif
 		    if ((curwin != curwin_save && win_valid(curwin_save))
 			    || (curtab != curtab_save
 						&& valid_tabpage(curtab_save)))
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1906,
+/**/
     1905,
 /**/
     1904,