Avoid unneeded recentering when header-line is used

* src/xdisp.c (try_window): Account for header-line height only in
the scroll-margin at the window's top, but not at its bottom.
(Bug#42653)
This commit is contained in:
Eli Zaretskii 2020-09-12 11:06:54 +03:00
parent 7d30ca7f66
commit 699e40caf6

View file

@ -19308,20 +19308,21 @@ try_window (Lisp_Object window, struct text_pos pos, int flags)
if ((flags & TRY_WINDOW_CHECK_MARGINS)
&& !MINI_WINDOW_P (w))
{
int this_scroll_margin = window_scroll_margin (w, MARGIN_IN_PIXELS);
int top_scroll_margin = window_scroll_margin (w, MARGIN_IN_PIXELS);
int bot_scroll_margin = top_scroll_margin;
if (window_wants_header_line (w))
this_scroll_margin += CURRENT_HEADER_LINE_HEIGHT (w);
top_scroll_margin += CURRENT_HEADER_LINE_HEIGHT (w);
start_display (&it, w, pos);
if ((w->cursor.y >= 0 /* not vscrolled */
&& w->cursor.y < this_scroll_margin
&& w->cursor.y < top_scroll_margin
&& CHARPOS (pos) > BEGV)
/* rms: considering make_cursor_line_fully_visible_p here
seems to give wrong results. We don't want to recenter
when the last line is partly visible, we want to allow
that case to be handled in the usual way. */
|| w->cursor.y > (it.last_visible_y - partial_line_height (&it)
- this_scroll_margin - 1))
- bot_scroll_margin - 1))
{
w->cursor.vpos = -1;
clear_glyph_matrix (w->desired_matrix);