diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-07-08 21:57:30 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-07-08 21:57:30 +0200 |
commit | 49fe95f22517b775506ef34681000d84bb417eb3 (patch) | |
tree | 7ad7c9afcc187735c9b6175bf85ac8efff012a2b /src | |
parent | 999224422633935eaa8b804ce3d1c2f9ca195d0a (diff) |
patch 8.1.1652: GUI: popup window doesn't close on mouse movementv8.1.1652
Problem: GUI: popup window doesn't close on mouse movement. (Paul Jolly)
Solution: Generate mouse-move events when a popup window is visible.
Diffstat (limited to 'src')
-rw-r--r-- | src/globals.h | 12 | ||||
-rw-r--r-- | src/gui.c | 32 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 32 insertions, 14 deletions
diff --git a/src/globals.h b/src/globals.h index ddafcc13df..3562b5ee6c 100644 --- a/src/globals.h +++ b/src/globals.h @@ -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 @@ -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); @@ -4894,6 +4891,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. */ void diff --git a/src/version.c b/src/version.c index cbfee049c8..50615798e2 100644 --- a/src/version.c +++ b/src/version.c @@ -778,6 +778,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1652, +/**/ 1651, /**/ 1650, |