forked from aniani/vim
patch 8.2.4619: mapping is cancelled when mouse moves and popup is visible
Problem: Mapping is cancelled when mouse moves and popup is visible. Solution: Only generate mouse moved events when a popup may use them. (closes #10004)
This commit is contained in:
parent
f4f0525c34
commit
f8e43f6107
@ -736,6 +736,9 @@ EXTERN win_T *popup_dragwin INIT(= NULL); // popup window being dragged
|
||||
// Set to TRUE if there is any visible popup window.
|
||||
EXTERN int popup_visible INIT(= FALSE);
|
||||
|
||||
// Set to TRUE if a visible popup window may use a MOUSE_MOVE event
|
||||
EXTERN int popup_uses_mouse_move INIT(= FALSE);
|
||||
|
||||
EXTERN int text_prop_frozen INIT(= 0);
|
||||
#endif
|
||||
|
||||
|
@ -4968,7 +4968,7 @@ gui_mouse_moved(int x, int y)
|
||||
gui_mouse_focus(x, y);
|
||||
|
||||
#ifdef FEAT_PROP_POPUP
|
||||
if (popup_visible)
|
||||
if (popup_uses_mouse_move)
|
||||
// Generate a mouse-moved event, so that the popup can perhaps be
|
||||
// closed, just like in the terminal.
|
||||
gui_send_mouse_event(MOUSE_MOVE, x, y, FALSE, 0);
|
||||
|
@ -150,6 +150,29 @@ set_mousemoved_values(win_T *wp)
|
||||
wp->w_popup_mouse_maxcol = mouse_col;
|
||||
}
|
||||
|
||||
static void
|
||||
update_popup_uses_mouse_move(void)
|
||||
{
|
||||
popup_uses_mouse_move = FALSE;
|
||||
if (popup_visible)
|
||||
{
|
||||
win_T *wp;
|
||||
|
||||
FOR_ALL_POPUPWINS(wp)
|
||||
if (wp->w_popup_mouse_row != 0)
|
||||
{
|
||||
popup_uses_mouse_move = TRUE;
|
||||
return;
|
||||
}
|
||||
FOR_ALL_POPUPWINS_IN_TAB(curtab, wp)
|
||||
if (wp->w_popup_mouse_row != 0)
|
||||
{
|
||||
popup_uses_mouse_move = TRUE;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Used when popup options contain "moved" with "word" or "WORD".
|
||||
*/
|
||||
@ -3586,7 +3609,7 @@ popup_need_position_adjust(win_T *wp)
|
||||
/*
|
||||
* Update "popup_mask" if needed.
|
||||
* Also recomputes the popup size and positions.
|
||||
* Also updates "popup_visible".
|
||||
* Also updates "popup_visible" and "popup_uses_mouse_move".
|
||||
* Also marks window lines for redrawing.
|
||||
*/
|
||||
void
|
||||
@ -3755,6 +3778,8 @@ may_update_popup_mask(int type)
|
||||
|
||||
vim_free(plines_cache);
|
||||
}
|
||||
|
||||
update_popup_uses_mouse_move();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
4619,
|
||||
/**/
|
||||
4618,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user