(adjust_glyph_matrix): Always clear desired matrices.
authorGerd Moellmann <gerd@gnu.org>
Fri, 26 Jan 2001 14:19:34 +0000 (14:19 +0000)
committerGerd Moellmann <gerd@gnu.org>
Fri, 26 Jan 2001 14:19:34 +0000 (14:19 +0000)
src/ChangeLog
src/dispnew.c

index 403a60a..49ae3e6 100644 (file)
@@ -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.
 
index c0471f2..c7a6582 100644 (file)
@@ -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;