# HG changeset patch # User Stefan Monnier # Date 1048860715 0 # Node ID c0fcb555d31db9c4f7aed6dd4ff77ba70eb2c5f3 # Parent 445b4a2ecf620f059733ab7c00b42f6faacb3d12 (set_vertical_scroll_bar): New fun. Extracted from redisplay_window. (redisplay_window): Use it. diff -r 445b4a2ecf62 -r c0fcb555d31d src/xdisp.c --- a/src/xdisp.c Thu Mar 27 22:40:29 2003 +0000 +++ b/src/xdisp.c Fri Mar 28 14:11:55 2003 +0000 @@ -11210,6 +11210,41 @@ return rc; } +void +set_vertical_scroll_bar (w) + struct window *w; +{ + int start, end, whole; + + /* Calculate the start and end positions for the current window. + At some point, it would be nice to choose between scrollbars + which reflect the whole buffer size, with special markers + indicating narrowing, and scrollbars which reflect only the + visible region. + + Note that mini-buffers sometimes aren't displaying any text. */ + if (!MINI_WINDOW_P (w) + || (w == XWINDOW (minibuf_window) + && NILP (echo_area_buffer[0]))) + { + struct buffer *buf = XBUFFER (w->buffer); + 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) - XFASTINT (w->window_end_pos) - BUF_BEGV (buf); + + if (end < start) + end = start; + if (whole < (end - start)) + whole = end - start; + } + else + start = end = whole = 0; + + /* Indicate what this scroll bar ought to be displaying now. */ + set_vertical_scroll_bar_hook (w, end - start, whole, start); +} /* Redisplay leaf window WINDOW. JUST_THIS_ONE_P non-zero means only selected_window is redisplayed. @@ -11899,35 +11934,8 @@ if (FRAME_HAS_VERTICAL_SCROLL_BARS (f)) { - int start, end, whole; - - /* Calculate the start and end positions for the current window. - At some point, it would be nice to choose between scrollbars - which reflect the whole buffer size, with special markers - indicating narrowing, and scrollbars which reflect only the - visible region. - - Note that mini-buffers sometimes aren't displaying any text. */ - if (!MINI_WINDOW_P (w) - || (w == XWINDOW (minibuf_window) - && NILP (echo_area_buffer[0]))) - { - whole = ZV - BEGV; - start = marker_position (w->start) - BEGV; - /* I don't think this is guaranteed to be right. For the - moment, we'll pretend it is. */ - end = (Z - XFASTINT (w->window_end_pos)) - BEGV; - - if (end < start) - end = start; - if (whole < (end - start)) - whole = end - start; - } - else - start = end = whole = 0; - - /* Indicate what this scroll bar ought to be displaying now. */ - set_vertical_scroll_bar_hook (w, end - start, whole, start); + /* Set the thumb's position and size. */ + set_vertical_scroll_bar (w); /* Note that we actually used the scroll bar attached to this window, so it shouldn't be deleted at the end of redisplay. */