diff --git a/src/version.c b/src/version.c
index dfe952c..f42be15 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3286,
+/**/
     3285,
 /**/
     3284,
diff --git a/src/window.c b/src/window.c
index 8e5d3de..237a795 100644
--- a/src/window.c
+++ b/src/window.c
@@ -40,7 +40,7 @@
 static void frame_fix_height(win_T *wp);
 static int frame_minheight(frame_T *topfrp, win_T *next_curwin);
 static int may_open_tabpage(void);
-static void win_enter_ext(win_T *wp, int undo_sync, int no_curwin, int trigger_new_autocmds, int trigger_enter_autocmds, int trigger_leave_autocmds);
+static void win_enter_ext(win_T *wp, int flags);
 static void win_free(win_T *wp, tabpage_T *tp);
 static int win_unlisted(win_T *wp);
 static void win_append(win_T *after, win_T *wp);
@@ -67,6 +67,13 @@
 
 #define ROWS_AVAIL (Rows - p_ch - tabline_height())
 
+// flags for win_enter_ext()
+#define WEE_UNDO_SYNC			0x01
+#define WEE_CURWIN_INVALID		0x02
+#define WEE_TRIGGER_NEW_AUTOCMDS	0x04
+#define WEE_TRIGGER_ENTER_AUTOCMDS	0x08
+#define WEE_TRIGGER_LEAVE_AUTOCMDS	0x10
+
 static char *m_onlyone = N_("Already only one window");
 
 // When non-zero splitting a window is forbidden.  Used to avoid that nasty
@@ -1331,7 +1338,8 @@
     /*
      * make the new window the current window
      */
-    win_enter_ext(wp, FALSE, FALSE, TRUE, TRUE, TRUE);
+    win_enter_ext(wp, WEE_TRIGGER_NEW_AUTOCMDS | WEE_TRIGGER_ENTER_AUTOCMDS
+						 | WEE_TRIGGER_LEAVE_AUTOCMDS);
     if (flags & WSP_VERT)
 	p_wiw = i;
     else
@@ -2653,7 +2661,8 @@
 	win_comp_pos();
     if (close_curwin)
     {
-	win_enter_ext(wp, FALSE, TRUE, FALSE, TRUE, TRUE);
+	win_enter_ext(wp, WEE_CURWIN_INVALID | WEE_TRIGGER_ENTER_AUTOCMDS
+						 | WEE_TRIGGER_LEAVE_AUTOCMDS);
 	if (other_buffer)
 	    // careful: after this wp and win may be invalid!
 	    apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
@@ -4179,8 +4188,9 @@
     // We would like doing the TabEnter event first, but we don't have a
     // valid current window yet, which may break some commands.
     // This triggers autocommands, thus may make "tp" invalid.
-    win_enter_ext(tp->tp_curwin, FALSE, TRUE, FALSE,
-			      trigger_enter_autocmds, trigger_leave_autocmds);
+    win_enter_ext(tp->tp_curwin, WEE_CURWIN_INVALID
+		  | (trigger_enter_autocmds ? WEE_TRIGGER_ENTER_AUTOCMDS : 0)
+		  | (trigger_leave_autocmds ? WEE_TRIGGER_LEAVE_AUTOCMDS : 0));
     prevwin = next_prevwin;
 
     last_status(FALSE);		// status line may appear or disappear
@@ -4679,24 +4689,20 @@
     void
 win_enter(win_T *wp, int undo_sync)
 {
-    win_enter_ext(wp, undo_sync, FALSE, FALSE, TRUE, TRUE);
+    win_enter_ext(wp, (undo_sync ? WEE_UNDO_SYNC : 0)
+		    | WEE_TRIGGER_ENTER_AUTOCMDS | WEE_TRIGGER_LEAVE_AUTOCMDS);
 }
 
 /*
- * Make window wp the current window.
- * Can be called with "curwin_invalid" TRUE, which means that curwin has just
- * been closed and isn't valid.
+ * Make window "wp" the current window.
+ * Can be called with "flags" containing WEE_CURWIN_INVALID, which means that
+ * curwin has just been closed and isn't valid.
  */
     static void
-win_enter_ext(
-    win_T	*wp,
-    int		undo_sync,
-    int		curwin_invalid,
-    int		trigger_new_autocmds,
-    int		trigger_enter_autocmds,
-    int		trigger_leave_autocmds)
+win_enter_ext(win_T *wp, int flags)
 {
     int		other_buffer = FALSE;
+    int		curwin_invalid = (flags & WEE_CURWIN_INVALID);
 
     if (wp == curwin && !curwin_invalid)	// nothing to do
 	return;
@@ -4706,7 +4712,7 @@
 	leaving_window(curwin);
 #endif
 
-    if (!curwin_invalid && trigger_leave_autocmds)
+    if (!curwin_invalid && (flags & WEE_TRIGGER_LEAVE_AUTOCMDS))
     {
 	/*
 	 * Be careful: If autocommands delete the window, return now.
@@ -4729,7 +4735,7 @@
     }
 
     // sync undo before leaving the current buffer
-    if (undo_sync && curbuf != wp->w_buffer)
+    if ((flags & WEE_UNDO_SYNC) && curbuf != wp->w_buffer)
 	u_sync(FALSE);
 
     // Might need to scroll the old window before switching, e.g., when the
@@ -4786,9 +4792,9 @@
     entering_window(curwin);
 #endif
     // Careful: autocommands may close the window and make "wp" invalid
-    if (trigger_new_autocmds)
+    if (flags & WEE_TRIGGER_NEW_AUTOCMDS)
 	apply_autocmds(EVENT_WINNEW, NULL, NULL, FALSE, curbuf);
-    if (trigger_enter_autocmds)
+    if (flags & WEE_TRIGGER_ENTER_AUTOCMDS)
     {
 	apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
 	if (other_buffer)
