diff src/popupmnu.c @ 14095:f452c4aeb837 v8.1.0065

patch 8.1.0065: balloon displayed at the wrong position commit https://github.com/vim/vim/commit/0e6e179f55b85b9e82e74d3f993928d52f0f4d43 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jun 17 17:10:59 2018 +0200 patch 8.1.0065: balloon displayed at the wrong position Problem: Balloon displayed at the wrong position. Solution: Do not reposition the popup menu at the cursor position.
author Christian Brabandt <cb@256bit.org>
date Sun, 17 Jun 2018 17:15:05 +0200
parents ae53a9274f50
children 17a7d9e71ebb
line wrap: on
line diff
--- a/src/popupmnu.c
+++ b/src/popupmnu.c
@@ -29,6 +29,7 @@ static int pum_scrollbar;		/* TRUE when 
 static int pum_row;			/* top row of pum */
 static int pum_col;			/* left column of pum */
 
+static win_T *pum_window = NULL;
 static int pum_win_row;
 static int pum_win_height;
 static int pum_win_col;
@@ -110,6 +111,7 @@ pum_display(
 
 	// Remember the essential parts of the window position and size, so we
 	// can decide when to reposition the popup menu.
+	pum_window = curwin;
 	pum_win_row = curwin->w_wrow + W_WINROW(curwin);
 	pum_win_height = curwin->w_height;
 	pum_win_col = curwin->w_wincol;
@@ -846,10 +848,11 @@ pum_may_redraw(void)
     if (!pum_visible())
 	return;  // nothing to do
 
-    if (pum_win_row == curwin->w_wrow + W_WINROW(curwin)
-	    && pum_win_height == curwin->w_height
-	    && pum_win_col == curwin->w_wincol
-	    && pum_win_width == curwin->w_width)
+    if (pum_window != curwin
+	    || (pum_win_row == curwin->w_wrow + W_WINROW(curwin)
+		&& pum_win_height == curwin->w_height
+		&& pum_win_col == curwin->w_wincol
+		&& pum_win_width == curwin->w_width))
     {
 	// window position didn't change, redraw in the same position
 	pum_redraw();
@@ -912,6 +915,9 @@ pum_position_at_mouse(int min_width)
     pum_width = Columns - pum_col;
     if (pum_width > pum_base_width + 1)
 	pum_width = pum_base_width + 1;
+
+    // Do not redraw at cursor position.
+    pum_window = NULL;
 }
 
 # endif