1
0
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:
Bram Moolenaar 2022-03-24 15:15:15 +00:00
parent f4f0525c34
commit f8e43f6107
4 changed files with 32 additions and 2 deletions

View File

@ -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

View File

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

View File

@ -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();
}
/*

View File

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