From 49fe95f22517b775506ef34681000d84bb417eb3 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 8 Jul 2019 21:57:30 +0200 Subject: 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. --- src/gui.c | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) (limited to 'src/gui.c') diff --git a/src/gui.c b/src/gui.c index 7c378c6fe..5dcab515a 100644 --- a/src/gui.c +++ b/src/gui.c @@ -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. */ -- cgit v1.2.1