summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerd Moellmann <gerd@gnu.org>2001-01-26 14:19:34 +0000
committerGerd Moellmann <gerd@gnu.org>2001-01-26 14:19:34 +0000
commitb7b20fbd16ed724495772ef6bc10744cd9e58b36 (patch)
treecbc584d96ed2440b5b418ee812e79be1b39e60ee
parent61076b20bd3b2f3e30504a6f96fc64f248f10d16 (diff)
downloademacs-b7b20fbd16ed724495772ef6bc10744cd9e58b36.tar.gz
(adjust_glyph_matrix): Always clear desired matrices.
-rw-r--r--src/ChangeLog2
-rw-r--r--src/dispnew.c73
2 files changed, 45 insertions, 30 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 403a60a7444..49ae3e66d29 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,7 @@
2001-01-26 Gerd Moellmann <gerd@gnu.org>
+ * dispnew.c (adjust_glyph_matrix): Always clear desired matrices.
+
* xdisp.c (display_line): Simplify check for glyphs fitting
entirely in the line.
diff --git a/src/dispnew.c b/src/dispnew.c
index c0471f2a31d..c7a65823819 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -775,44 +775,57 @@ adjust_glyph_matrix (w, matrix, x, y, dim)
matrix->nrows = dim.height;
xassert (matrix->nrows >= 0);
- /* Mark rows in a current matrix of a window as not having valid
- contents. It's important to not do this for desired matrices.
- When Emacs starts, it may already be building desired matrices
- when this function runs. */
- if (w && matrix == w->current_matrix)
- {
- if (window_width < 0)
- window_width = window_box_width (w, -1);
-
- /* Optimize the case that only the height has changed (C-x 2,
- upper window). Invalidate all rows that are no longer part
- of the window. */
- if (!marginal_areas_changed_p
- && matrix->window_left_x == XFASTINT (w->left)
- && matrix->window_top_y == XFASTINT (w->top)
- && matrix->window_width == window_box_width (w, -1))
+ if (w)
+ {
+ if (matrix == w->current_matrix)
{
- i = 0;
- while (matrix->rows[i].enabled_p
- && (MATRIX_ROW_BOTTOM_Y (matrix->rows + i)
- < matrix->window_height))
- ++i;
-
- /* Window end is invalid, if inside of the rows that
- are invalidated. */
- if (INTEGERP (w->window_end_vpos)
- && XFASTINT (w->window_end_vpos) >= i)
- w->window_end_valid = Qnil;
+ /* Mark rows in a current matrix of a window as not having
+ valid contents. It's important to not do this for
+ desired matrices. When Emacs starts, it may already be
+ building desired matrices when this function runs. */
+ if (window_width < 0)
+ window_width = window_box_width (w, -1);
+
+ /* Optimize the case that only the height has changed (C-x 2,
+ upper window). Invalidate all rows that are no longer part
+ of the window. */
+ if (!marginal_areas_changed_p
+ && matrix->window_left_x == XFASTINT (w->left)
+ && matrix->window_top_y == XFASTINT (w->top)
+ && matrix->window_width == window_box_width (w, -1))
+ {
+ i = 0;
+ while (matrix->rows[i].enabled_p
+ && (MATRIX_ROW_BOTTOM_Y (matrix->rows + i)
+ < matrix->window_height))
+ ++i;
+
+ /* Window end is invalid, if inside of the rows that
+ are invalidated. */
+ if (INTEGERP (w->window_end_vpos)
+ && XFASTINT (w->window_end_vpos) >= i)
+ w->window_end_valid = Qnil;
- while (i < matrix->nrows)
- matrix->rows[i++].enabled_p = 0;
+ while (i < matrix->nrows)
+ matrix->rows[i++].enabled_p = 0;
+ }
+ else
+ {
+ for (i = 0; i < matrix->nrows; ++i)
+ matrix->rows[i].enabled_p = 0;
+ }
}
- else
+ else if (matrix == w->desired_matrix)
{
+ /* Rows in desired matrices always have to be cleared;
+ redisplay expects this is the case when it runs, so it
+ had better be the case when we adjust matrices between
+ redisplays. */
for (i = 0; i < matrix->nrows; ++i)
matrix->rows[i].enabled_p = 0;
}
}
+
/* Remember last values to be able to optimize frame redraws. */
matrix->matrix_x = x;