diff options
author | Gerd Moellmann <gerd@gnu.org> | 2001-01-26 14:19:34 +0000 |
---|---|---|
committer | Gerd Moellmann <gerd@gnu.org> | 2001-01-26 14:19:34 +0000 |
commit | b7b20fbd16ed724495772ef6bc10744cd9e58b36 (patch) | |
tree | cbc584d96ed2440b5b418ee812e79be1b39e60ee /src/dispnew.c | |
parent | 61076b20bd3b2f3e30504a6f96fc64f248f10d16 (diff) | |
download | emacs-b7b20fbd16ed724495772ef6bc10744cd9e58b36.tar.gz |
(adjust_glyph_matrix): Always clear desired matrices.
Diffstat (limited to 'src/dispnew.c')
-rw-r--r-- | src/dispnew.c | 73 |
1 files changed, 43 insertions, 30 deletions
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; |