Skip to content

Commit

Permalink
patch 8.1.1884: cannot use mouse scroll wheel in popup in Insert mode
Browse files Browse the repository at this point in the history
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)
  • Loading branch information
brammool committed Aug 18, 2019
1 parent 9513d91 commit f0bc15c
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 2 deletions.
6 changes: 5 additions & 1 deletion src/edit.c
Expand Up @@ -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;
Expand All @@ -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
Expand Down
30 changes: 30 additions & 0 deletions src/insexpand.c
Expand Up @@ -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))
Expand Down
12 changes: 11 additions & 1 deletion src/popupmnu.c
Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -769,6 +769,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1884,
/**/
1883,
/**/
Expand Down

0 comments on commit f0bc15c

Please sign in to comment.