diff --git a/src/mouse.c b/src/mouse.c
index 40c2159..25e65ed 100644
--- a/src/mouse.c
+++ b/src/mouse.c
@@ -179,18 +179,6 @@
 }
 #endif
 
-static int	mouse_got_click = FALSE;	// got a click some time back
-
-/*
- * Reset the flag that a mouse click was seen.  To be called when switching tab
- * page.
- */
-    void
-reset_mouse_got_click(void)
-{
-    mouse_got_click = FALSE;
-}
-
 /*
  * Do the appropriate action for the current mouse click in the current mode.
  * Not used for Command-line mode.
@@ -236,6 +224,7 @@
     int		fixindent)	// PUT_FIXINDENT if fixing indent necessary
 {
     static int	do_always = FALSE;	// ignore 'mouse' setting next time
+    static int	got_click = FALSE;	// got a click some time back
 
     int		which_button;	// MOUSE_LEFT, _MIDDLE or _RIGHT
     int		is_click = FALSE; // If FALSE it's a drag or release event
@@ -347,14 +336,14 @@
 
     // Ignore drag and release events if we didn't get a click.
     if (is_click)
-	mouse_got_click = TRUE;
+	got_click = TRUE;
     else
     {
-	if (!mouse_got_click)			// didn't get click, ignore
+	if (!got_click)			// didn't get click, ignore
 	    return FALSE;
-	if (!is_drag)			// release, reset mouse_got_click
+	if (!is_drag)			// release, reset got_click
 	{
-	    mouse_got_click = FALSE;
+	    got_click = FALSE;
 	    if (in_tab_line)
 	    {
 		in_tab_line = FALSE;
@@ -371,7 +360,7 @@
 	if (count > 1)
 	    stuffnumReadbuff(count);
 	stuffcharReadbuff(Ctrl_T);
-	mouse_got_click = FALSE;		// ignore drag&release now
+	got_click = FALSE;		// ignore drag&release now
 	return FALSE;
     }
 
@@ -652,7 +641,7 @@
 	    }
 # ifdef FEAT_MENU
 	    show_popupmenu();
-	    mouse_got_click = FALSE;	// ignore release events
+	    got_click = FALSE;	// ignore release events
 # endif
 	    return (jump_flags & CURSOR_MOVED) != 0;
 #else
@@ -709,7 +698,7 @@
     // next mouse click.
     if (!is_drag && oap != NULL && oap->op_type != OP_NOP)
     {
-	mouse_got_click = FALSE;
+	got_click = FALSE;
 	oap->motion_type = MCHAR;
     }
 
@@ -908,7 +897,7 @@
 	    do_cmdline_cmd((char_u *)".cc");
 	else					// location list window
 	    do_cmdline_cmd((char_u *)".ll");
-	mouse_got_click = FALSE;		// ignore drag&release now
+	got_click = FALSE;		// ignore drag&release now
     }
 #endif
 
@@ -920,7 +909,7 @@
 	if (State & MODE_INSERT)
 	    stuffcharReadbuff(Ctrl_O);
 	stuffcharReadbuff(Ctrl_RSB);
-	mouse_got_click = FALSE;		// ignore drag&release now
+	got_click = FALSE;		// ignore drag&release now
     }
 
     // Shift-Mouse click searches for the next occurrence of the word under
@@ -1513,6 +1502,17 @@
     return (p_mousem[0] == 'p');
 }
 
+static win_T *dragwin = NULL;	// window being dragged
+
+/*
+ * Reset the window being dragged.  To be called when switching tab page.
+ */
+    void
+reset_dragwin(void)
+{
+    dragwin = NULL;
+}
+
 /*
  * Move the cursor to the specified row and column on the screen.
  * Change current window if necessary.	Returns an integer with the
@@ -1556,7 +1556,6 @@
 #endif
     static int	prev_row = -1;
     static int	prev_col = -1;
-    static win_T *dragwin = NULL;	// window being dragged
     static int	did_drag = FALSE;	// drag was noticed
 
     win_T	*wp, *old_curwin;
diff --git a/src/proto/mouse.pro b/src/proto/mouse.pro
index 6597689..7ce470c 100644
--- a/src/proto/mouse.pro
+++ b/src/proto/mouse.pro
@@ -1,7 +1,6 @@
 /* mouse.c */
 void mouse_set_vert_scroll_step(long step);
 void mouse_set_hor_scroll_step(long step);
-void reset_mouse_got_click(void);
 int do_mouse(oparg_T *oap, int c, int dir, long count, int fixindent);
 void ins_mouse(int c);
 void ins_mousescroll(int dir);
@@ -13,6 +12,7 @@
 void setmouse(void);
 int mouse_has(int c);
 int mouse_model_popup(void);
+void reset_dragwin(void);
 int jump_to_mouse(int flags, int *inclusive, int which_button);
 void nv_mousescroll(cmdarg_T *cap);
 void nv_mouse(cmdarg_T *cap);
diff --git a/src/testdir/test_termcodes.vim b/src/testdir/test_termcodes.vim
index cb9897e..0b2365e 100644
--- a/src/testdir/test_termcodes.vim
+++ b/src/testdir/test_termcodes.vim
@@ -562,11 +562,7 @@
       call MouseLeftClick(row, col)
       let row -= 1
       call MouseLeftDrag(row, col)
-      " FIXME: for unknown reason this test fails, related to calling
-      " reset_mouse_got_click() earlier.
-      if ttymouse_val !=# 'xterm2'
-        call assert_equal(rowseparator - 1, winheight(0) + 1, msg)
-      endif
+      call assert_equal(rowseparator - 1, winheight(0) + 1, msg)
       let row += 1
       call MouseLeftDrag(row, col)
       call assert_equal(rowseparator, winheight(0) + 1, msg)
@@ -779,6 +775,28 @@
         \              'Tab page 2',
         \              '    Xtab1'], a, msg)
 
+    " Switch to tab1
+    tabnext
+    let a = split(execute(':tabs'), "\n")
+    call assert_equal(['Tab page 1',
+        \              '    Xtab2',
+        \              'Tab page 2',
+        \              '>   Xtab1'], a, msg)
+
+    " Click in tab2 and drag it to tab1.
+    " This time it is non-current tab.
+    call MouseLeftClick(row, 6)
+    call assert_equal(0, getcharmod(), msg)
+    for col in [7, 8, 9, 10]
+      call MouseLeftDrag(row, col)
+    endfor
+    call MouseLeftRelease(row, col)
+    let a = split(execute(':tabs'), "\n")
+    call assert_equal(['Tab page 1',
+        \              '    Xtab1',
+        \              'Tab page 2',
+        \              '>   Xtab2'], a, msg)
+
     " Click elsewhere so that click in next iteration is not
     " interpreted as unwanted double-click.
     call MouseLeftClick(row, 11)
diff --git a/src/version.c b/src/version.c
index 5d1a2fb..c1875ad 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    825,
+/**/
     824,
 /**/
     823,
diff --git a/src/window.c b/src/window.c
index b4e8e94..996a8aa 100644
--- a/src/window.c
+++ b/src/window.c
@@ -4269,7 +4269,7 @@
 	    return FAIL;
     }
 
-    reset_mouse_got_click();
+    reset_dragwin();
 #if defined(FEAT_GUI)
     // Remove the scrollbars.  They may be added back later.
     if (gui.in_use)
@@ -4338,7 +4338,7 @@
 
     // If there was a click in a window, it won't be usable for a following
     // drag.
-    reset_mouse_got_click();
+    reset_dragwin();
 
     // The tabpage line may have appeared or disappeared, may need to resize
     // the frames for that.  When the Vim window was resized need to update
