diff --git a/src/screen.c b/src/screen.c
index 4d277e3..a74f750 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -1154,7 +1154,7 @@
     }
 
     /* Window is zero-height: nothing to draw. */
-    if (wp->w_height == 0)
+    if (wp->w_height + WINBAR_HEIGHT(wp) == 0)
     {
 	wp->w_redr_type = 0;
 	return;
diff --git a/src/version.c b/src/version.c
index 9df11cc..c41aed0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -772,6 +772,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1375,
+/**/
     1374,
 /**/
     1373,
diff --git a/src/vim.h b/src/vim.h
index bf6c3d3..b43c210 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -1478,8 +1478,10 @@
 #define STATUS_HEIGHT	1	/* height of a status line under a window */
 #ifdef FEAT_MENU		/* height of a status line under a window */
 # define WINBAR_HEIGHT(wp)	(wp)->w_winbar_height
+# define VISIBLE_HEIGHT(wp)	((wp)->w_height + (wp)->w_winbar_height)
 #else
 # define WINBAR_HEIGHT(wp)	0
+# define VISIBLE_HEIGHT(wp)	(wp)->w_height
 #endif
 #define QF_WINHEIGHT	10	/* default height for quickfix window */
 
diff --git a/src/window.c b/src/window.c
index 7d58c8a..ffe4e38 100644
--- a/src/window.c
+++ b/src/window.c
@@ -782,7 +782,7 @@
     /* add a status line when p_ls == 1 and splitting the first window */
     if (ONE_WINDOW && p_ls == 1 && oldwin->w_status_height == 0)
     {
-	if (oldwin->w_height <= p_wmh && new_wp == NULL)
+	if (VISIBLE_HEIGHT(oldwin) <= p_wmh && new_wp == NULL)
 	{
 	    EMSG(_(e_noroom));
 	    return FAIL;
@@ -892,7 +892,7 @@
 	 * height.
 	 */
 	/* Current window requires at least 1 space. */
-	wmh1 = (p_wmh == 0 ? 1 : p_wmh);
+	wmh1 = (p_wmh == 0 ? 1 : p_wmh) + WINBAR_HEIGHT(curwin);
 	needed = wmh1 + STATUS_HEIGHT;
 	if (flags & WSP_ROOM)
 	    needed += p_wh - wmh1;
@@ -1105,7 +1105,7 @@
 	{
 	    /* height and row of new window is same as current window */
 	    wp->w_winrow = oldwin->w_winrow;
-	    win_new_height(wp, oldwin->w_height + WINBAR_HEIGHT(oldwin));
+	    win_new_height(wp, VISIBLE_HEIGHT(oldwin));
 	    wp->w_status_height = oldwin->w_status_height;
 	}
 	frp->fr_height = curfrp->fr_height;
@@ -1180,8 +1180,8 @@
 	}
 	else		/* new window below current one */
 	{
-	    wp->w_winrow = oldwin->w_winrow + oldwin->w_height
-				       + STATUS_HEIGHT + WINBAR_HEIGHT(oldwin);
+	    wp->w_winrow = oldwin->w_winrow + VISIBLE_HEIGHT(oldwin)
+							       + STATUS_HEIGHT;
 	    wp->w_status_height = oldwin->w_status_height;
 	    if (!(flags & WSP_BOT))
 		oldwin->w_status_height = STATUS_HEIGHT;
@@ -1422,7 +1422,7 @@
     else
     {
 	/* Each window needs at least 'winminheight' lines and a status line. */
-	maxcount = (curwin->w_height + curwin->w_status_height
+	maxcount = (VISIBLE_HEIGHT(curwin) + curwin->w_status_height
 				  - (p_wh - p_wmh)) / (p_wmh + STATUS_HEIGHT);
     }
 
@@ -3204,8 +3204,7 @@
     static void
 frame_fix_height(win_T *wp)
 {
-    wp->w_frame->fr_height = wp->w_height + wp->w_status_height
-							  + WINBAR_HEIGHT(wp) ;
+    wp->w_frame->fr_height = VISIBLE_HEIGHT(wp) + wp->w_status_height;
 }
 
 /*
@@ -3230,9 +3229,14 @@
 	{
 	    /* window: minimal height of the window plus status line */
 	    m = p_wmh + topfrp->fr_win->w_status_height;
-	    /* Current window is minimal one line high */
-	    if (p_wmh == 0 && topfrp->fr_win == curwin && next_curwin == NULL)
-		++m;
+	    if (topfrp->fr_win == curwin && next_curwin == NULL)
+	    {
+		/* Current window is minimal one line high and WinBar is
+		 * visible. */
+		if (p_wmh == 0)
+		    ++m;
+		m += WINBAR_HEIGHT(curwin);
+	    }
 	}
     }
     else if (topfrp->fr_layout == FR_ROW)
@@ -4972,6 +4976,7 @@
     frame_T	*frp;
     int		startcol;
     int		startrow;
+    int		h;
 
     wp = topfrp->fr_win;
     if (wp != NULL)
@@ -4984,7 +4989,9 @@
 	    redraw_win_later(wp, NOT_VALID);
 	    wp->w_redr_status = TRUE;
 	}
-	*row += wp->w_height + wp->w_status_height;
+	/* WinBar will not show if the window height is zero */
+	h = VISIBLE_HEIGHT(wp) + wp->w_status_height;
+	*row += h > topfrp->fr_height ? topfrp->fr_height : h;
 	*col += wp->w_width + wp->w_vsep_width;
     }
     else
@@ -5029,6 +5036,7 @@
 	    height = p_wmh;
 	if (height == 0)
 	    height = 1;
+	height += WINBAR_HEIGHT(curwin);
     }
 
     frame_setheight(win->w_frame, height + win->w_status_height);
@@ -5126,7 +5134,8 @@
 	    else
 	    {
 		room_cmdline = Rows - p_ch - (lastwin->w_winrow
-			       + lastwin->w_height + lastwin->w_status_height);
+						+ VISIBLE_HEIGHT(lastwin)
+						+ lastwin->w_status_height);
 		if (room_cmdline < 0)
 		    room_cmdline = 0;
 	    }
@@ -5415,7 +5424,7 @@
 	/* TODO: handle vertical splits */
 	room = -p_wh;
 	FOR_ALL_WINDOWS(wp)
-	    room += wp->w_height - p_wmh;
+	    room += VISIBLE_HEIGHT(wp) - p_wmh;
 	if (room >= 0)
 	    break;
 	--p_wmh;
