diff src/popupwin.c @ 17934:0bf8cb0258be v8.1.1963

patch 8.1.1963: popup window filter may be called recursively Commit: https://github.com/vim/vim/commit/934470e562df7bc778ff916db44918f3ccecc7cc Author: Bram Moolenaar <Bram@vim.org> Date: Sun Sep 1 23:27:05 2019 +0200 patch 8.1.1963: popup window filter may be called recursively Problem: Popup window filter may be called recursively when using a Normal mode command. Solution: Prevent recursiveness. (closes #4887) Also restore KeyTyped.
author Bram Moolenaar <Bram@vim.org>
date Sun, 01 Sep 2019 23:30:03 +0200
parents ad7a4bd65f20
children ec4248c4b92c
line wrap: on
line diff
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -2764,8 +2764,14 @@ invoke_popup_filter(win_T *wp, int c)
     int
 popup_do_filter(int c)
 {
+    static int	recursive = FALSE;
     int		res = FALSE;
     win_T	*wp;
+    int		save_KeyTyped = KeyTyped;
+
+    if (recursive)
+	return FALSE;
+    recursive = TRUE;
 
     popup_reset_handled();
 
@@ -2776,13 +2782,15 @@ popup_do_filter(int c)
 
 	wp = mouse_find_win(&row, &col, FIND_POPUP);
 	if (wp != NULL && popup_close_if_on_X(wp, row, col))
-	    return TRUE;
+	    res = TRUE;
     }
 
     while (!res && (wp = find_next_popup(FALSE)) != NULL)
 	if (wp->w_filter_cb.cb_name != NULL)
 	    res = invoke_popup_filter(wp, c);
 
+    recursive = FALSE;
+    KeyTyped = save_KeyTyped;
     return res;
 }