1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-26 23:31:55 -08:00

Fix calculation of the vertical scroll bar's thumb

* src/xdisp.c (set_vertical_scroll_bar): Compute window's end
position "by hand" if w->window_end_pos cannot be relied upon.
This commit is contained in:
Eli Zaretskii 2022-07-08 09:42:02 +03:00
parent 7b19ce51fc
commit c0c4600ece

View file

@ -18872,19 +18872,34 @@ set_vertical_scroll_bar (struct window *w)
&& NILP (echo_area_buffer[0])))
{
struct buffer *buf = XBUFFER (w->contents);
ptrdiff_t window_end_pos = w->window_end_pos;
/* If w->window_end_pos cannot be trusted, recompute it "the
hard way". */
if (!w->window_end_valid)
{
struct it it;
struct text_pos start_pos;
SET_TEXT_POS_FROM_MARKER (start_pos, w->start);
start_display (&it, w, start_pos);
move_it_to (&it, -1, it.last_visible_x, window_box_height (w), -1,
MOVE_TO_X | MOVE_TO_Y);
window_end_pos = BUF_Z (buf) - IT_CHARPOS (it);
}
if (! BUFFER_AUTO_NARROWED_P (buf))
{
whole = BUF_ZV (buf) - BUF_BEGV (buf);
start = marker_position (w->start) - BUF_BEGV (buf);
/* I don't think this is guaranteed to be right. For the
moment, we'll pretend it is. */
end = BUF_Z (buf) - w->window_end_pos - BUF_BEGV (buf);
end = BUF_Z (buf) - window_end_pos - BUF_BEGV (buf);
}
else
{
whole = BUF_Z (buf) - BUF_BEG (buf);
start = marker_position (w->start) - BUF_BEG (buf);
end = BUF_Z (buf) - w->window_end_pos - BUF_BEG (buf);
end = BUF_Z (buf) - window_end_pos - BUF_BEG (buf);
}
if (end < start)