]> granicus.if.org Git - vim/commitdiff
patch 8.1.1906: info popup size is sometimes incorrect v8.1.1906
authorBram Moolenaar <Bram@vim.org>
Wed, 21 Aug 2019 17:33:16 +0000 (19:33 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 21 Aug 2019 17:33:16 +0000 (19:33 +0200)
Problem:    Info popup size is sometimes incorrect.
Solution:   Compute the position and size after setting the content.

src/popupmnu.c
src/version.c

index 03eb412bb050ed36de3f6ed5752ef90017543740..c25cff22aac6a4c629b430a1bf35d9ca03c96a0c 100644 (file)
@@ -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 UNUSED)
 # 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 UNUSED)
                        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)))
index ae0bd9c4e04288ee12bee44ce4cf9a6365755b22..6d5f96ef05e1c211eb5c0268712d7fc604540aee 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1906,
 /**/
     1905,
 /**/