1
0
forked from aniani/vim

patch 8.1.1884: cannot use mouse scroll wheel in popup in Insert mode

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)
This commit is contained in:
Bram Moolenaar
2019-08-18 19:23:45 +02:00
parent 9513d91be0
commit f0bc15c769
4 changed files with 48 additions and 2 deletions

View 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

View 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))

View 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);

View File

@@ -769,6 +769,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1884,
/**/
1883,
/**/