Commit e8c17b81 authored by Paul Eggert's avatar Paul Eggert

* window.h (WSET): Remove.

Replace all uses with calls to new setter functions.
Use INLINE_HEADER_BEGIN, INLINE_HEADER_END.
(WINDOW_INLINE): New macro.
(wset_buffer, wset_frame, wset_left_col, wset_next, wset_prev)
(wset_redisplay_end_trigger, wset_top_line, wset_total_cols)
(wset_total_lines, wset_vertical_scroll_bar)
(wset_window_end_pos, wset_window_end_valid)
(wset_window_end_vpos): New setter functions.
* window.c (WINDOW_INLINE):
Define to EXTERN_INLINE, so that the corresponding functions
are compiled into code.
(wset_combination_limit, wset_dedicated, wset_display_table)
(wset_hchild, wset_left_fringe_width, wset_left_margin_cols)
(wset_new_normal, wset_new_total, wset_next_buffers)
(wset_normal_cols, wset_normal_lines, wset_parent, wset_pointm)
(wset_prev_buffers, wset_right_fringe_width)
(wset_right_margin_cols, wset_scroll_bar_width, wset_start)
(wset_temslot, wset_vchild, wset_vertical_scroll_bar_type)
(wset_window_parameters):
* xdisp.c (wset_base_line_number, wset_base_line_pos)
(wset_column_number_displayed, wset_region_showing):
New setter functions.

Fixes: debbugs:12215
parent 3f22b86f
2012-08-18 Paul Eggert <eggert@cs.ucla.edu>
* window.h (WSET): Remove (Bug#12215).
Replace all uses with calls to new setter functions.
Use INLINE_HEADER_BEGIN, INLINE_HEADER_END.
(WINDOW_INLINE): New macro.
(wset_buffer, wset_frame, wset_left_col, wset_next, wset_prev)
(wset_redisplay_end_trigger, wset_top_line, wset_total_cols)
(wset_total_lines, wset_vertical_scroll_bar)
(wset_window_end_pos, wset_window_end_valid)
(wset_window_end_vpos): New setter functions.
* window.c (WINDOW_INLINE):
Define to EXTERN_INLINE, so that the corresponding functions
are compiled into code.
(wset_combination_limit, wset_dedicated, wset_display_table)
(wset_hchild, wset_left_fringe_width, wset_left_margin_cols)
(wset_new_normal, wset_new_total, wset_next_buffers)
(wset_normal_cols, wset_normal_lines, wset_parent, wset_pointm)
(wset_prev_buffers, wset_right_fringe_width)
(wset_right_margin_cols, wset_scroll_bar_width, wset_start)
(wset_temslot, wset_vchild, wset_vertical_scroll_bar_type)
(wset_window_parameters):
* xdisp.c (wset_base_line_number, wset_base_line_pos)
(wset_column_number_displayed, wset_region_showing):
New setter functions.
* termhooks.h (TSET): Remove (Bug#12215).
Replace all uses with calls to new setter functions.
Use INLINE_HEADER_BEGIN, INLINE_HEADER_END.
......
......@@ -621,7 +621,7 @@ adjust_glyph_matrix (struct window *w, struct glyph_matrix *matrix, int x, int y
are invalidated below. */
if (INTEGERP (w->window_end_vpos)
&& XFASTINT (w->window_end_vpos) >= i)
WSET (w, window_end_valid, Qnil);
wset_window_end_valid (w, Qnil);
while (i < matrix->nrows)
matrix->rows[i++].enabled_p = 0;
......@@ -878,7 +878,7 @@ clear_window_matrices (struct window *w, int desired_p)
else
{
clear_glyph_matrix (w->current_matrix);
WSET (w, window_end_valid, Qnil);
wset_window_end_valid (w, Qnil);
}
}
......@@ -1887,14 +1887,14 @@ adjust_frame_glyphs_initially (void)
int top_margin = FRAME_TOP_MARGIN (sf);
/* Do it for the root window. */
WSET (root, top_line, make_number (top_margin));
WSET (root, total_lines, make_number (frame_lines - 1 - top_margin));
WSET (root, total_cols, make_number (frame_cols));
wset_top_line (root, make_number (top_margin));
wset_total_lines (root, make_number (frame_lines - 1 - top_margin));
wset_total_cols (root, make_number (frame_cols));
/* Do it for the mini-buffer window. */
WSET (mini, top_line, make_number (frame_lines - 1));
WSET (mini, total_lines, make_number (1));
WSET (mini, total_cols, make_number (frame_cols));
wset_top_line (mini, make_number (frame_lines - 1));
wset_total_lines (mini, make_number (1));
wset_total_cols (mini, make_number (frame_cols));
adjust_frame_glyphs (sf);
glyphs_initialized_initially_p = 1;
......@@ -2169,7 +2169,7 @@ adjust_frame_glyphs_for_window_redisplay (struct frame *f)
fset_menu_bar_window (f, make_window ());
w = XWINDOW (f->menu_bar_window);
XSETFRAME (frame, f);
WSET (w, frame, frame);
wset_frame (w, frame);
w->pseudo_window_p = 1;
}
else
......@@ -2177,10 +2177,10 @@ adjust_frame_glyphs_for_window_redisplay (struct frame *f)
/* Set window dimensions to frame dimensions and allocate or
adjust glyph matrices of W. */
WSET (w, top_line, make_number (0));
WSET (w, left_col, make_number (0));
WSET (w, total_lines, make_number (FRAME_MENU_BAR_LINES (f)));
WSET (w, total_cols, make_number (FRAME_TOTAL_COLS (f)));
wset_top_line (w, make_number (0));
wset_left_col (w, make_number (0));
wset_total_lines (w, make_number (FRAME_MENU_BAR_LINES (f)));
wset_total_cols (w, make_number (FRAME_TOTAL_COLS (f)));
allocate_matrices_for_window_redisplay (w);
}
#endif /* not USE_X_TOOLKIT && not USE_GTK */
......@@ -2197,16 +2197,16 @@ adjust_frame_glyphs_for_window_redisplay (struct frame *f)
fset_tool_bar_window (f, make_window ());
w = XWINDOW (f->tool_bar_window);
XSETFRAME (frame, f);
WSET (w, frame, frame);
wset_frame (w, frame);
w->pseudo_window_p = 1;
}
else
w = XWINDOW (f->tool_bar_window);
WSET (w, top_line, make_number (FRAME_MENU_BAR_LINES (f)));
WSET (w, left_col, make_number (0));
WSET (w, total_lines, make_number (FRAME_TOOL_BAR_LINES (f)));
WSET (w, total_cols, make_number (FRAME_TOTAL_COLS (f)));
wset_top_line (w, make_number (FRAME_MENU_BAR_LINES (f)));
wset_left_col (w, make_number (0));
wset_total_lines (w, make_number (FRAME_TOOL_BAR_LINES (f)));
wset_total_cols (w, make_number (FRAME_TOTAL_COLS (f)));
allocate_matrices_for_window_redisplay (w);
}
#endif
......@@ -5744,7 +5744,7 @@ change_frame_size_1 (register struct frame *f, int newheight, int newwidth, int
FrameCols (FRAME_TTY (f)) = newwidth;
if (WINDOWP (f->tool_bar_window))
WSET (XWINDOW (f->tool_bar_window), total_cols, make_number (newwidth));
wset_total_cols (XWINDOW (f->tool_bar_window), make_number (newwidth));
}
FRAME_LINES (f) = newheight;
......
......@@ -148,8 +148,8 @@ set_menu_bar_lines_1 (Lisp_Object window, int n)
struct window *w = XWINDOW (window);
w->last_modified = 0;
WSET (w, top_line, make_number (XFASTINT (w->top_line) + n));
WSET (w, total_lines, make_number (XFASTINT (w->total_lines) - n));
wset_top_line (w, make_number (XFASTINT (w->top_line) + n));
wset_total_lines (w, make_number (XFASTINT (w->total_lines) - n));
/* Handle just the top child in a vertical split. */
if (!NILP (w->vchild))
......@@ -305,20 +305,20 @@ make_frame (int mini_p)
if (mini_p)
{
mini_window = make_window ();
WSET (XWINDOW (root_window), next, mini_window);
WSET (XWINDOW (mini_window), prev, root_window);
wset_next (XWINDOW (root_window), mini_window);
wset_prev (XWINDOW (mini_window), root_window);
XWINDOW (mini_window)->mini = 1;
WSET (XWINDOW (mini_window), frame, frame);
wset_frame (XWINDOW (mini_window), frame);
fset_minibuffer_window (f, mini_window);
}
else
{
mini_window = Qnil;
WSET (XWINDOW (root_window), next, Qnil);
wset_next (XWINDOW (root_window), Qnil);
fset_minibuffer_window (f, Qnil);
}
WSET (XWINDOW (root_window), frame, frame);
wset_frame (XWINDOW (root_window), frame);
/* 10 is arbitrary,
just so that there is "something there."
......@@ -327,21 +327,21 @@ make_frame (int mini_p)
SET_FRAME_COLS (f, 10);
FRAME_LINES (f) = 10;
WSET (XWINDOW (root_window), total_cols, make_number (10));
WSET (XWINDOW (root_window), total_lines, make_number (mini_p ? 9 : 10));
wset_total_cols (XWINDOW (root_window), make_number (10));
wset_total_lines (XWINDOW (root_window), make_number (mini_p ? 9 : 10));
if (mini_p)
{
WSET (XWINDOW (mini_window), total_cols, make_number (10));
WSET (XWINDOW (mini_window), top_line, make_number (9));
WSET (XWINDOW (mini_window), total_lines, make_number (1));
wset_total_cols (XWINDOW (mini_window), make_number (10));
wset_top_line (XWINDOW (mini_window), make_number (9));
wset_total_lines (XWINDOW (mini_window), make_number (1));
}
/* Choose a buffer for the frame's root window. */
{
Lisp_Object buf;
WSET (XWINDOW (root_window), buffer, Qt);
wset_buffer (XWINDOW (root_window), Qt);
buf = Fcurrent_buffer ();
/* If buf is a 'hidden' buffer (i.e. one whose name starts with
a space), try to find another one. */
......@@ -360,7 +360,7 @@ make_frame (int mini_p)
if (mini_p)
{
WSET (XWINDOW (mini_window), buffer, Qt);
wset_buffer (XWINDOW (mini_window), Qt);
set_window_buffer (mini_window,
(NILP (Vminibuffer_list)
? get_minibuffer (0)
......@@ -458,9 +458,9 @@ make_minibuffer_frame (void)
mini_window = f->root_window;
fset_minibuffer_window (f, mini_window);
XWINDOW (mini_window)->mini = 1;
WSET (XWINDOW (mini_window), next, Qnil);
WSET (XWINDOW (mini_window), prev, Qnil);
WSET (XWINDOW (mini_window), frame, frame);
wset_next (XWINDOW (mini_window), Qnil);
wset_prev (XWINDOW (mini_window), Qnil);
wset_frame (XWINDOW (mini_window), frame);
/* Put the proper buffer in that window. */
......
......@@ -2003,7 +2003,7 @@ whether or not it is currently displayed in some window. */)
old_buffer = w->buffer;
old_charpos = XMARKER (w->pointm)->charpos;
old_bytepos = XMARKER (w->pointm)->bytepos;
WSET (w, buffer, Fcurrent_buffer ());
wset_buffer (w, Fcurrent_buffer ());
set_marker_both (w->pointm, w->buffer,
BUF_PT (current_buffer), BUF_PT_BYTE (current_buffer));
}
......@@ -2146,7 +2146,7 @@ whether or not it is currently displayed in some window. */)
if (BUFFERP (old_buffer))
{
WSET (w, buffer, old_buffer);
wset_buffer (w, old_buffer);
set_marker_both (w->pointm, w->buffer,
old_charpos, old_bytepos);
}
......
......@@ -3698,7 +3698,7 @@ overwriting cursor (usually when cursor on a tab) */
{
bar = XNS_SCROLL_BAR (window->vertical_scroll_bar);
[bar removeFromSuperview];
WSET (window, vertical_scroll_bar, Qnil);
wset_vertical_scroll_bar (window, Qnil);
}
ns_clear_frame_area (f, sb_left, top, width, height);
UNBLOCK_INPUT;
......@@ -3709,7 +3709,7 @@ overwriting cursor (usually when cursor on a tab) */
{
ns_clear_frame_area (f, sb_left, top, width, height);
bar = [[EmacsScroller alloc] initFrame: r window: win];
WSET (window, vertical_scroll_bar, make_save_value (bar, 0));
wset_vertical_scroll_bar (window, make_save_value (bar, 0));
}
else
{
......@@ -6388,7 +6388,7 @@ - (void)dealloc
{
NSTRACE (EmacsScroller_dealloc);
if (!NILP (win))
WSET (XWINDOW (win), vertical_scroll_bar, Qnil);
wset_vertical_scroll_bar (XWINDOW (win), Qnil);
[super dealloc];
}
......
......@@ -5647,8 +5647,8 @@ Text larger than the specified size is clipped. */)
/* Set up the frame's root window. */
w = XWINDOW (FRAME_ROOT_WINDOW (f));
WSET (w, left_col, make_number (0));
WSET (w, top_line, make_number (0));
wset_left_col (w, make_number (0));
wset_top_line (w, make_number (0));
if (CONSP (Vx_max_tooltip_size)
&& INTEGERP (XCAR (Vx_max_tooltip_size))
......@@ -5656,13 +5656,13 @@ Text larger than the specified size is clipped. */)
&& INTEGERP (XCDR (Vx_max_tooltip_size))
&& XINT (XCDR (Vx_max_tooltip_size)) > 0)
{
WSET (w, total_cols, XCAR (Vx_max_tooltip_size));
WSET (w, total_lines, XCDR (Vx_max_tooltip_size));
wset_total_cols (w, XCAR (Vx_max_tooltip_size));
wset_total_lines (w, XCDR (Vx_max_tooltip_size));
}
else
{
WSET (w, total_cols, make_number (80));
WSET (w, total_lines, make_number (40));
wset_total_cols (w, make_number (80));
wset_total_lines (w, make_number (40));
}
FRAME_TOTAL_COLS (f) = XINT (w->total_cols);
......@@ -5733,7 +5733,7 @@ Text larger than the specified size is clipped. */)
/* w->total_cols and FRAME_TOTAL_COLS want the width in columns,
not in pixels. */
width /= WINDOW_FRAME_COLUMN_WIDTH (w);
WSET (w, total_cols, make_number (width));
wset_total_cols (w, make_number (width));
FRAME_TOTAL_COLS (f) = width;
adjust_glyphs (f);
w->pseudo_window_p = 1;
......
......@@ -3670,7 +3670,7 @@ x_scroll_bar_remove (struct scroll_bar *bar)
my_destroy_window (f, SCROLL_BAR_W32_WINDOW (bar));
/* Dissociate this scroll bar from its window. */
WSET (XWINDOW (bar->window), vertical_scroll_bar, Qnil);
wset_vertical_scroll_bar (XWINDOW (bar->window), Qnil);
UNBLOCK_INPUT;
}
......@@ -3808,7 +3808,7 @@ w32_set_vertical_scroll_bar (struct window *w,
w32_set_scroll_bar_thumb (bar, portion, position, whole);
XSETVECTOR (barobj, bar);
WSET (w, vertical_scroll_bar, barobj);
wset_vertical_scroll_bar (w, barobj);
}
......
This diff is collapsed.
......@@ -22,6 +22,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include "dispextern.h"
INLINE_HEADER_BEGIN
#ifndef WINDOW_INLINE
# define WINDOW_INLINE INLINE
#endif
extern Lisp_Object Qleft, Qright;
/* Windows are allocated as if they were vectors, but then the
......@@ -86,10 +91,6 @@ struct cursor_pos
int hpos, vpos;
};
/* Most code should use this macro to set Lisp fields in struct window. */
#define WSET(w, field, value) ((w)->field = (value))
struct window
{
/* This is for Lisp; the terminal code does not refer to it. */
......@@ -348,6 +349,75 @@ struct window
ptrdiff_t window_end_bytepos;
};
/* Most code should use these functions to set Lisp fields in struct
window. */
WINDOW_INLINE void
wset_buffer (struct window *w, Lisp_Object val)
{
w->buffer = val;
}
WINDOW_INLINE void
wset_frame (struct window *w, Lisp_Object val)
{
w->frame = val;
}
WINDOW_INLINE void
wset_left_col (struct window *w, Lisp_Object val)
{
w->left_col = val;
}
WINDOW_INLINE void
wset_next (struct window *w, Lisp_Object val)
{
w->next = val;
}
WINDOW_INLINE void
wset_prev (struct window *w, Lisp_Object val)
{
w->prev = val;
}
WINDOW_INLINE void
wset_redisplay_end_trigger (struct window *w, Lisp_Object val)
{
w->redisplay_end_trigger = val;
}
WINDOW_INLINE void
wset_top_line (struct window *w, Lisp_Object val)
{
w->top_line = val;
}
WINDOW_INLINE void
wset_total_cols (struct window *w, Lisp_Object val)
{
w->total_cols = val;
}
WINDOW_INLINE void
wset_total_lines (struct window *w, Lisp_Object val)
{
w->total_lines = val;
}
WINDOW_INLINE void
wset_vertical_scroll_bar (struct window *w, Lisp_Object val)
{
w->vertical_scroll_bar = val;
}
WINDOW_INLINE void
wset_window_end_pos (struct window *w, Lisp_Object val)
{
w->window_end_pos = val;
}
WINDOW_INLINE void
wset_window_end_valid (struct window *w, Lisp_Object val)
{
w->window_end_valid = val;
}
WINDOW_INLINE void
wset_window_end_vpos (struct window *w, Lisp_Object val)
{
w->window_end_vpos = val;
}
/* 1 if W is a minibuffer window. */
#define MINI_WINDOW_P(W) ((W)->mini)
......@@ -916,4 +986,6 @@ extern void init_window (void);
extern void syms_of_window (void);
extern void keys_of_window (void);
INLINE_HEADER_END
#endif /* not WINDOW_H_INCLUDED */
......@@ -365,6 +365,28 @@ Lisp_Object Qcenter;
static Lisp_Object Qmargin, Qpointer;
static Lisp_Object Qline_height;
/* These setters are used only in this file, so they can be private. */
static inline void
wset_base_line_number (struct window *w, Lisp_Object val)
{
w->base_line_number = val;
}
static inline void
wset_base_line_pos (struct window *w, Lisp_Object val)
{
w->base_line_pos = val;
}
static inline void
wset_column_number_displayed (struct window *w, Lisp_Object val)
{
w->column_number_displayed = val;
}
static inline void
wset_region_showing (struct window *w, Lisp_Object val)
{
w->region_showing = val;
}
#ifdef HAVE_WINDOW_SYSTEM
/* Test if overflow newline into fringe. Called with iterator IT
......@@ -7981,7 +8003,7 @@ run_redisplay_end_trigger_hook (struct it *it)
/* Since we are *trying* to run these functions, don't try to run
them again, even if they get an error. */
WSET (it->w, redisplay_end_trigger, Qnil);
wset_redisplay_end_trigger (it->w, Qnil);
Frun_hook_with_args (3, args);
/* Notice if it changed the face of the character we are on. */
......@@ -9969,7 +9991,7 @@ with_echo_area_buffer (struct window *w, int which,
set_buffer_internal_1 (XBUFFER (buffer));
if (w)
{
WSET (w, buffer, buffer);
wset_buffer (w, buffer);
set_marker_both (w->pointm, buffer, BEG, BEG_BYTE);
}
......@@ -10054,7 +10076,7 @@ unwind_with_echo_area_buffer (Lisp_Object vector)
charpos = AREF (vector, 5);
bytepos = AREF (vector, 6);
WSET (w, buffer, buffer);
wset_buffer (w, buffer);
set_marker_both (w->pointm, buffer,
XFASTINT (charpos), XFASTINT (bytepos));
}
......@@ -13266,12 +13288,12 @@ redisplay_internal (void)
if ((it.glyph_row - 1)->displays_text_p)
{
if (XFASTINT (w->window_end_vpos) < this_line_vpos)
WSET (w, window_end_vpos, make_number (this_line_vpos));
wset_window_end_vpos (w, make_number (this_line_vpos));
}
else if (XFASTINT (w->window_end_vpos) == this_line_vpos
&& this_line_vpos > 0)
WSET (w, window_end_vpos, make_number (this_line_vpos - 1));
WSET (w, window_end_valid, Qnil);
wset_window_end_vpos (w, make_number (this_line_vpos - 1));
wset_window_end_valid (w, Qnil);
/* Update hint: No need to try to scroll in update_window. */
w->desired_matrix->no_scrolling_p = 1;
......@@ -13737,7 +13759,7 @@ mark_window_display_accurate_1 (struct window *w, int accurate_p)
if (accurate_p)
{
WSET (w, window_end_valid, w->buffer);
wset_window_end_valid (w, w->buffer);
w->update_mode_line = 0;
}
}
......@@ -14845,7 +14867,7 @@ try_scrolling (Lisp_Object window, int just_this_one_p,
if (!just_this_one_p
|| current_buffer->clip_changed
|| BEG_UNCHANGED < CHARPOS (startp))
WSET (w, base_line_number, Qnil);
wset_base_line_number (w, Qnil);
/* If cursor ends up on a partially visible line,
treat that as being off the bottom of the screen. */
......@@ -15470,7 +15492,7 @@ redisplay_window (Lisp_Object window, int just_this_one_p)
if (XMARKER (w->start)->buffer == current_buffer)
compute_window_start_on_continuation_line (w);
WSET (w, window_end_valid, Qnil);
wset_window_end_valid (w, Qnil);
}
/* Some sanity checks. */
......@@ -15581,11 +15603,11 @@ redisplay_window (Lisp_Object window, int just_this_one_p)
w->force_start = 0;
w->vscroll = 0;
WSET (w, window_end_valid, Qnil);
wset_window_end_valid (w, Qnil);
/* Forget any recorded base line for line number display. */
if (!buffer_unchanged_p)
WSET (w, base_line_number, Qnil);
wset_base_line_number (w, Qnil);
/* Redisplay the mode line. Select the buffer properly for that.
Also, run the hook window-scroll-functions
......@@ -15799,7 +15821,7 @@ redisplay_window (Lisp_Object window, int just_this_one_p)
|| current_buffer->clip_changed
|| BEG_UNCHANGED < CHARPOS (startp))
/* Forget any recorded base line for line number display. */
WSET (w, base_line_number, Qnil);
wset_base_line_number (w, Qnil);
if (!cursor_row_fully_visible_p (w, 1, 0))
{
......@@ -15870,7 +15892,7 @@ redisplay_window (Lisp_Object window, int just_this_one_p)
/* Forget any previously recorded base line for line number display. */
if (!buffer_unchanged_p)
WSET (w, base_line_number, Qnil);
wset_base_line_number (w, Qnil);
/* Determine the window start relative to point. */
init_iterator (&it, w, PT, PT_BYTE, NULL, DEFAULT_FACE_ID);
......@@ -16128,8 +16150,8 @@ redisplay_window (Lisp_Object window, int just_this_one_p)
if (!line_number_displayed
&& !BUFFERP (w->base_line_pos))
{
WSET (w, base_line_pos, Qnil);
WSET (w, base_line_number, Qnil);
wset_base_line_pos (w, Qnil);
wset_base_line_number (w, Qnil);
}
finish_menu_bars:
......@@ -16306,10 +16328,10 @@ try_window (Lisp_Object window, struct text_pos pos, int flags)
eassert (MATRIX_ROW_DISPLAYS_TEXT_P (last_text_row));
w->window_end_bytepos
= Z_BYTE - MATRIX_ROW_END_BYTEPOS (last_text_row);
WSET (w, window_end_pos,
make_number (Z - MATRIX_ROW_END_CHARPOS (last_text_row)));
WSET (w, window_end_vpos,
make_number (MATRIX_ROW_VPOS (last_text_row, w->desired_matrix)));
wset_window_end_pos
(w, make_number (Z - MATRIX_ROW_END_CHARPOS (last_text_row)));
wset_window_end_vpos
(w, make_number (MATRIX_ROW_VPOS (last_text_row, w->desired_matrix)));
eassert
(MATRIX_ROW (w->desired_matrix,
XFASTINT (w->window_end_vpos))->displays_text_p);
......@@ -16317,12 +16339,12 @@ try_window (Lisp_Object window, struct text_pos pos, int flags)
else
{
w->window_end_bytepos = Z_BYTE - ZV_BYTE;
WSET (w, window_end_pos, make_number (Z - ZV));
WSET (w, window_end_vpos, make_number (0));
wset_window_end_pos (w, make_number (Z - ZV));
wset_window_end_vpos (w, make_number (0));
}
/* But that is not valid info until redisplay finishes. */
WSET (w, window_end_valid, Qnil);
wset_window_end_valid (w, Qnil);
return 1;
}
......@@ -16546,28 +16568,31 @@ try_window_reusing_current_matrix (struct window *w)
{
w->window_end_bytepos
= Z_BYTE - MATRIX_ROW_END_BYTEPOS (last_reused_text_row);
WSET (w, window_end_pos,
make_number (Z - MATRIX_ROW_END_CHARPOS (last_reused_text_row)));
WSET (w, window_end_vpos,
make_number (MATRIX_ROW_VPOS (last_reused_text_row, w->current_matrix)));
wset_window_end_pos
(w, make_number (Z
- MATRIX_ROW_END_CHARPOS (last_reused_text_row)));
wset_window_end_vpos
(w, make_number (MATRIX_ROW_VPOS (last_reused_text_row,
w->current_matrix)));
}
else if (last_text_row)
{
w->window_end_bytepos
= Z_BYTE - MATRIX_ROW_END_BYTEPOS (last_text_row);
WSET (w, window_end_pos,
make_number (Z - MATRIX_ROW_END_CHARPOS (last_text_row)));
WSET (w, window_end_vpos,
make_number (MATRIX_ROW_VPOS (last_text_row, w->desired_matrix)));
wset_window_end_pos
(w, make_number (Z - MATRIX_ROW_END_CHARPOS (last_text_row)));
wset_window_end_vpos
(w, make_number (MATRIX_ROW_VPOS (last_text_row,
w->desired_matrix)));
}
else
{
/* This window must be completely empty. */
w->window_end_bytepos = Z_BYTE - ZV_BYTE;
WSET (w, window_end_pos, make_number (Z - ZV));
WSET (w, window_end_vpos, make_number (0));
wset_window_end_pos (w, make_number (Z - ZV));
wset_window_end_vpos (w, make_number (0));
}
WSET (w, window_end_valid, Qnil);
wset_window_end_valid (w, Qnil);
/* Update hint: don't try scrolling again in update_window. */
w->desired_matrix->no_scrolling_p = 1;
......@@ -16748,18 +16773,19 @@ try_window_reusing_current_matrix (struct window *w)
{
w->window_end_bytepos
= Z_BYTE - MATRIX_ROW_END_BYTEPOS (last_text_row);
WSET (w, window_end_pos,
make_number (Z - MATRIX_ROW_END_CHARPOS (last_text_row)));
WSET (w, window_end_vpos,
make_number (MATRIX_ROW_VPOS (last_text_row, w->desired_matrix)));
wset_window_end_pos
(w, make_number (Z - MATRIX_ROW_END_CHARPOS (last_text_row)));
wset_window_end_vpos
(w, make_number (MATRIX_ROW_VPOS (last_text_row,
w->desired_matrix)));
}
else
{
WSET (w, window_end_vpos,
make_number (XFASTINT (w->window_end_vpos) - nrows_scrolled));
wset_window_end_vpos
(w, make_number (XFASTINT (w->window_end_vpos) - nrows_scrolled));
}
WSET (w, window_end_valid, Qnil);
wset_window_end_valid (w, Qnil);
w->desired_matrix->no_scrolling_p = 1;
#ifdef GLYPH_DEBUG
......@@ -17331,8 +17357,8 @@ try_window_id (struct window *w)
{
/* We have to compute the window end anew since text
could have been added/removed after it. */
WSET (w, window_end_pos,
make_number (Z - MATRIX_ROW_END_CHARPOS (row)));
wset_window_end_pos
(w, make_number (Z - MATRIX_ROW_END_CHARPOS (row)));
w->window_end_bytepos
= Z_BYTE - MATRIX_ROW_END_BYTEPOS (row);
......@@ -17766,21 +17792,22 @@ try_window_id (st