mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
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:
@@ -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.
|
// Set to TRUE if there is any visible popup window.
|
||||||
EXTERN int popup_visible INIT(= FALSE);
|
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);
|
EXTERN int text_prop_frozen INIT(= 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -4968,7 +4968,7 @@ gui_mouse_moved(int x, int y)
|
|||||||
gui_mouse_focus(x, y);
|
gui_mouse_focus(x, y);
|
||||||
|
|
||||||
#ifdef FEAT_PROP_POPUP
|
#ifdef FEAT_PROP_POPUP
|
||||||
if (popup_visible)
|
if (popup_uses_mouse_move)
|
||||||
// Generate a mouse-moved event, so that the popup can perhaps be
|
// Generate a mouse-moved event, so that the popup can perhaps be
|
||||||
// closed, just like in the terminal.
|
// closed, just like in the terminal.
|
||||||
gui_send_mouse_event(MOUSE_MOVE, x, y, FALSE, 0);
|
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;
|
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".
|
* 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.
|
* Update "popup_mask" if needed.
|
||||||
* Also recomputes the popup size and positions.
|
* 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.
|
* Also marks window lines for redrawing.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
@@ -3755,6 +3778,8 @@ may_update_popup_mask(int type)
|
|||||||
|
|
||||||
vim_free(plines_cache);
|
vim_free(plines_cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
update_popup_uses_mouse_move();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
4619,
|
||||||
/**/
|
/**/
|
||||||
4618,
|
4618,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user