0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.1.1652: GUI: popup window doesn't close on mouse movement

Problem:    GUI: popup window doesn't close on mouse movement. (Paul Jolly)
Solution:   Generate mouse-move events when a popup window is visible.
This commit is contained in:
Bram Moolenaar
2019-07-08 21:57:30 +02:00
parent 9992244226
commit 49fe95f225
3 changed files with 32 additions and 14 deletions

View File

@@ -603,6 +603,11 @@ EXTERN int aucmd_win_used INIT(= FALSE); /* aucmd_win is being used */
#ifdef FEAT_TEXT_PROP
EXTERN win_T *first_popupwin; // first global popup window
EXTERN win_T *popup_dragwin INIT(= NULL); // popup window being dragged
// Set to TRUE if there is any visible popup.
EXTERN int popup_visible INIT(= FALSE);
EXTERN int text_prop_frozen INIT(= 0);
#endif
/*
@@ -1680,10 +1685,3 @@ typedef int HINSTANCE;
EXTERN int ctrl_break_was_pressed INIT(= FALSE);
EXTERN HINSTANCE g_hinst INIT(= NULL);
#endif
#ifdef FEAT_TEXT_PROP
EXTERN int text_prop_frozen INIT(= 0);
// Set to TRUE if there is any visible popup.
EXTERN int popup_visible INIT(= FALSE);
#endif

View File

@@ -4823,18 +4823,15 @@ gui_focus_change(int in_focus)
}
/*
* Called when the mouse moved (but not when dragging).
* When mouse moved: apply 'mousefocus'.
* Also updates the mouse pointer shape.
*/
void
gui_mouse_moved(int x, int y)
static void
gui_mouse_focus(int x, int y)
{
win_T *wp;
char_u st[8];
/* Ignore this while still starting up. */
if (!gui.in_use || gui.starting)
return;
#ifdef FEAT_MOUSESHAPE
/* Get window pointer, and update mouse shape as well. */
wp = xy2win(x, y);
@@ -4893,6 +4890,27 @@ gui_mouse_moved(int x, int y)
}
}
/*
* Called when the mouse moved (but not when dragging).
*/
void
gui_mouse_moved(int x, int y)
{
// Ignore this while still starting up.
if (!gui.in_use || gui.starting)
return;
// apply 'mousefocus' and pointer shape
gui_mouse_focus(x, y);
#ifdef FEAT_TEXT_PROP
if (popup_visible)
// Generate a mouse-moved event, so that the popup can perhaps be
// closed, just like in the terminal.
gui_send_mouse_event(MOUSE_DRAG, x, y, FALSE, 0);
#endif
}
/*
* Called when mouse should be moved to window with focus.
*/

View File

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