diff options
-rw-r--r-- | src/globals.h | 3 | ||||
-rw-r--r-- | src/gui.c | 2 | ||||
-rw-r--r-- | src/popupwin.c | 27 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 32 insertions, 2 deletions
diff --git a/src/globals.h b/src/globals.h index 1a50649a11..cd8893b307 100644 --- a/src/globals.h +++ b/src/globals.h @@ -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. 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); #endif @@ -4968,7 +4968,7 @@ gui_mouse_moved(int x, int y) gui_mouse_focus(x, y); #ifdef FEAT_PROP_POPUP - if (popup_visible) + if (popup_uses_mouse_move) // Generate a mouse-moved event, so that the popup can perhaps be // closed, just like in the terminal. gui_send_mouse_event(MOUSE_MOVE, x, y, FALSE, 0); diff --git a/src/popupwin.c b/src/popupwin.c index 0aca7d3246..55f98f8a6f 100644 --- a/src/popupwin.c +++ b/src/popupwin.c @@ -150,6 +150,29 @@ set_mousemoved_values(win_T *wp) 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". */ @@ -3586,7 +3609,7 @@ popup_need_position_adjust(win_T *wp) /* * Update "popup_mask" if needed. * 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. */ void @@ -3755,6 +3778,8 @@ may_update_popup_mask(int type) vim_free(plines_cache); } + + update_popup_uses_mouse_move(); } /* diff --git a/src/version.c b/src/version.c index 39eefb5f64..693cebc06a 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4619, +/**/ 4618, /**/ 4617, |