mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-27 15:52:00 -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:
parent
7b19ce51fc
commit
c0c4600ece
1 changed files with 17 additions and 2 deletions
19
src/xdisp.c
19
src/xdisp.c
|
|
@ -18872,19 +18872,34 @@ set_vertical_scroll_bar (struct window *w)
|
||||||
&& NILP (echo_area_buffer[0])))
|
&& NILP (echo_area_buffer[0])))
|
||||||
{
|
{
|
||||||
struct buffer *buf = XBUFFER (w->contents);
|
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))
|
if (! BUFFER_AUTO_NARROWED_P (buf))
|
||||||
{
|
{
|
||||||
whole = BUF_ZV (buf) - BUF_BEGV (buf);
|
whole = BUF_ZV (buf) - BUF_BEGV (buf);
|
||||||
start = marker_position (w->start) - BUF_BEGV (buf);
|
start = marker_position (w->start) - BUF_BEGV (buf);
|
||||||
/* I don't think this is guaranteed to be right. For the
|
/* I don't think this is guaranteed to be right. For the
|
||||||
moment, we'll pretend it is. */
|
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
|
else
|
||||||
{
|
{
|
||||||
whole = BUF_Z (buf) - BUF_BEG (buf);
|
whole = BUF_Z (buf) - BUF_BEG (buf);
|
||||||
start = marker_position (w->start) - 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)
|
if (end < start)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue