diff --git a/src/popupwin.c b/src/popupwin.c
index ce2f51d..a6e2e87 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -2862,12 +2862,31 @@
 
     argv[2].v_type = VAR_UNKNOWN;
 
+    if (is_mouse_key(c))
+    {
+	int		row = mouse_row - wp->w_winrow;
+	int		col = mouse_col - wp->w_wincol;
+	linenr_T	lnum;
+
+	if (row >= 0 && col >= 0)
+	{
+	    (void)mouse_comp_pos(wp, &row, &col, &lnum, NULL);
+	    set_vim_var_nr(VV_MOUSE_LNUM, lnum);
+	    set_vim_var_nr(VV_MOUSE_COL, col + 1);
+	}
+    }
+
     // NOTE: The callback might close the popup and make "wp" invalid.
     call_callback(&wp->w_filter_cb, -1, &rettv, 2, argv);
     if (win_valid_popup(wp) && old_lnum != wp->w_cursor.lnum)
 	popup_highlight_curline(wp);
-
     res = tv_get_number(&rettv);
+
+    if (is_mouse_key(c))
+    {
+	set_vim_var_nr(VV_MOUSE_LNUM, 0);
+	set_vim_var_nr(VV_MOUSE_COL, 0);
+    }
     vim_free(argv[1].vval.v_string);
     clear_tv(&rettv);
     return res;
@@ -2891,8 +2910,6 @@
 	return FALSE;
     recursive = TRUE;
 
-    popup_reset_handled();
-
     if (c == K_LEFTMOUSE)
     {
 	int row = mouse_row;
@@ -2903,6 +2920,7 @@
 	    res = TRUE;
     }
 
+    popup_reset_handled();
     state = get_real_state();
     while (!res && (wp = find_next_popup(FALSE)) != NULL)
 	if (wp->w_filter_cb.cb_name != NULL
diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim
index 0a45df4..eab569f 100644
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -2166,6 +2166,44 @@
   delfunc MyPopupFilter
 endfunc
 
+func Test_popupwin_filter_mouse()
+  func MyPopupFilter(winid, c)
+    let g:got_mouse_col = v:mouse_col
+    let g:got_mouse_lnum = v:mouse_lnum
+    return 0
+  endfunc
+
+  let winid = popup_create(['short', 'long line that will wrap', 'short'], #{
+	\ line: 4,
+	\ col: 8,
+	\ maxwidth: 12,
+	\ filter: 'MyPopupFilter',
+	\ })
+  redraw
+  call test_setmouse(4, 8)
+  call feedkeys("\<LeftMouse>", 'xt')
+  call assert_equal(1, g:got_mouse_col)
+  call assert_equal(1, g:got_mouse_lnum)
+
+  call test_setmouse(5, 8)
+  call feedkeys("\<LeftMouse>", 'xt')
+  call assert_equal(1, g:got_mouse_col)
+  call assert_equal(2, g:got_mouse_lnum)
+
+  call test_setmouse(6, 8)
+  call feedkeys("\<LeftMouse>", 'xt')
+  call assert_equal(13, g:got_mouse_col)
+  call assert_equal(2, g:got_mouse_lnum)
+
+  call test_setmouse(7, 20)
+  call feedkeys("\<LeftMouse>", 'xt')
+  call assert_equal(13, g:got_mouse_col)
+  call assert_equal(3, g:got_mouse_lnum)
+
+  call popup_close(winid)
+  delfunc MyPopupFilter
+endfunc
+
 func Test_popupwin_with_buffer()
   call writefile(['some text', 'in a buffer'], 'XsomeFile')
   let buf = bufadd('XsomeFile')
diff --git a/src/version.c b/src/version.c
index 73a0c1f..9bb1436 100644
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2266,
+/**/
     2265,
 /**/
     2264,
