0
0
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:
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. // 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

View File

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

View File

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

View File

@@ -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,
/**/ /**/