]> granicus.if.org Git - vim/commitdiff
patch 8.1.1884: cannot use mouse scroll wheel in popup in Insert mode v8.1.1884
authorBram Moolenaar <Bram@vim.org>
Sun, 18 Aug 2019 17:23:45 +0000 (19:23 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 18 Aug 2019 17:23:45 +0000 (19:23 +0200)
Problem:    Cannot use mouse scroll wheel in popup in Insert mode.  Mouse
            clicks in popup close the popup menu.
Solution:   Check if the mouse is in a popup window. Do not let mouse events
            close the popup menu.  (closes #4544)

src/edit.c
src/insexpand.c
src/popupmnu.c
src/version.c

index 4de17aa180139f5816efb459da75b2b18557f3a1..83b4be784d0e36a25e9f536c990aca196e7b79d7 100644 (file)
@@ -5267,7 +5267,7 @@ ins_mousescroll(int dir)
        col = mouse_col;
 
        /* find the window at the pointer coordinates */
-       wp = mouse_find_win(&row, &col, FAIL_POPUP);
+       wp = mouse_find_win(&row, &col, FIND_POPUP);
        if (wp == NULL)
            return;
        curwin = wp;
@@ -5288,6 +5288,10 @@ ins_mousescroll(int dir)
                        (long)(curwin->w_botline - curwin->w_topline));
            else
                scroll_redraw(dir, 3L);
+# ifdef FEAT_TEXT_PROP
+       if (WIN_IS_POPUP(curwin))
+           popup_set_firstline(curwin);
+# endif
        }
 #ifdef FEAT_GUI
        else
index 136fb67f0117148e8d58c888f915329509f4422c..a86630f6215fc781fd98b606509f73b1caee4fe1 100644 (file)
@@ -1943,6 +1943,36 @@ ins_compl_prep(int c)
            || c == K_MOUSELEFT || c == K_MOUSERIGHT)
        return retval;
 
+#ifdef FEAT_TEXT_PROP
+    // Ignore mouse events in a popup window
+    if (is_mouse_key(c))
+    {
+       // Ignore drag and release events, the position does not need to be in
+       // the popup and it may have just closed.
+       if (c == K_LEFTRELEASE
+               || c == K_LEFTRELEASE_NM
+               || c == K_MIDDLERELEASE
+               || c == K_RIGHTRELEASE
+               || c == K_X1RELEASE
+               || c == K_X2RELEASE
+               || c == K_LEFTDRAG
+               || c == K_MIDDLEDRAG
+               || c == K_RIGHTDRAG
+               || c == K_X1DRAG
+               || c == K_X2DRAG)
+           return retval;
+       if (popup_visible)
+       {
+           int     row = mouse_row;
+           int     col = mouse_col;
+           win_T   *wp = mouse_find_win(&row, &col, FIND_POPUP);
+
+           if (wp != NULL && WIN_IS_POPUP(wp))
+               return retval;
+       }
+    }
+#endif
+
     // Set "compl_get_longest" when finding the first matches.
     if (ctrl_x_mode == CTRL_X_NOT_DEFINED_YET
                           || (ctrl_x_mode == CTRL_X_NORMAL && !compl_started))
index 97b2fff1ea17af8006b18c46f54dde7106673130..4d84ba843674f1365495f5bb44e83e5e6759f998 100644 (file)
@@ -638,6 +638,7 @@ pum_set_selected(int n, int repeat)
 {
     int            resized = FALSE;
     int            context = pum_height / 2;
+    int            prev_selected = pum_selected;
 #ifdef FEAT_TEXT_PROP
     int            has_info = FALSE;
 #endif
@@ -826,7 +827,16 @@ pum_set_selected(int n, int repeat)
 
                    curbuf->b_changed = 0;
                    curbuf->b_p_ma = FALSE;
-                   curwin->w_cursor.lnum = 1;
+                   if (pum_selected != prev_selected)
+                   {
+# ifdef FEAT_TEXT_PROP
+                       curwin->w_firstline = 1;
+# endif
+                       curwin->w_topline = 1;
+                   }
+                   else if (curwin->w_topline > curbuf->b_ml.ml_line_count)
+                       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);
index e39567f58b556ca034da99aced82a79182e4541b..85d47c67970b06a66e3fa30e7ebe8256c4426438 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1884,
 /**/
     1883,
 /**/