summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-07-08 21:57:30 +0200
committerBram Moolenaar <Bram@vim.org>2019-07-08 21:57:30 +0200
commit49fe95f22517b775506ef34681000d84bb417eb3 (patch)
tree7ad7c9afcc187735c9b6175bf85ac8efff012a2b /src
parent999224422633935eaa8b804ce3d1c2f9ca195d0a (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.h12
-rw-r--r--src/gui.c32
-rw-r--r--src/version.c2
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
diff --git a/src/gui.c b/src/gui.c
index 7c378c6fe1..5dcab515ae 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);
@@ -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,