- && FRAME_WANTS_MODELINE_P (XFRAME (WINDOW_FRAME ((W)))) \
- && !NILP (BVAR (XBUFFER ((W)->contents), header_line_format)) \
- && WINDOW_TOTAL_LINES (W) > \
- (1 + !NILP (BVAR (XBUFFER ((W)->contents), mode_line_format)))) \
- : 0)
+ && FRAME_WANTS_MODELINE_P (XFRAME (WINDOW_FRAME (W))) \
+ && !NILP (BVAR (XBUFFER ((W)->contents), mode_line_format)) \
+ && WINDOW_PIXEL_HEIGHT (W) > WINDOW_FRAME_LINE_HEIGHT (W)) \
+ : false)
+
+/* Value is true if window W wants a header line and is large enough
+ to accommodate it. */
+#define WINDOW_WANTS_HEADER_LINE_P(W) \
+ (BUFFERP ((W)->contents) \
+ ? (!MINI_WINDOW_P (W) \
+ && !(W)->pseudo_window_p \
+ && FRAME_WANTS_MODELINE_P (XFRAME (WINDOW_FRAME (W))) \
+ && !NILP (BVAR (XBUFFER ((W)->contents), header_line_format)) \
+ && (WINDOW_PIXEL_HEIGHT (W) \
+ > (WINDOW_WANTS_MODELINE_P (W) \
+ ? (2 * WINDOW_FRAME_LINE_HEIGHT (W)) \
+ : WINDOW_FRAME_LINE_HEIGHT (W)))) \
+ : false)