Followup to 2011-10-19T09:48:35Z!eliz@gnu.org.
authorEli Zaretskii <eliz@gnu.org>
Wed, 19 Oct 2011 11:46:17 +0000 (13:46 +0200)
committerEli Zaretskii <eliz@gnu.org>
Wed, 19 Oct 2011 11:46:17 +0000 (13:46 +0200)
 src/xdisp.c (try_window_reusing_current_matrix): If a line ends in a display
 vector or the next line starts in a display vector, continue
 redrawing the window even though the character position of
 start_row was reached.

Fixes: debbugs:9771

src/ChangeLog
src/xdisp.c

index 9abbe45..c6a23a7 100644 (file)
@@ -2,6 +2,10 @@
 
        * xdisp.c (start_display): If the character at POS is displayed
        via a display vector, reset IT->current.dpvec_index to zero.
+       (try_window_reusing_current_matrix): If a line ends in a display
+       vector or the next line starts in a display vector, continue
+       redrawing the window even though the character position of
+       start_row was reached.
        (Bug#9771, part 2)
 
 2011-10-18  Chong Yidong  <cyd@gnu.org>
index 50ddd6b..0757fee 100644 (file)
@@ -16078,13 +16078,20 @@ try_window_reusing_current_matrix (struct window *w)
 
              start_vpos = MATRIX_ROW_VPOS (start_row, w->current_matrix);
            }
-         /* If we have reached alignment,
-            we can copy the rest of the rows.  */
-         if (IT_CHARPOS (it) == CHARPOS (start))
+         /* If we have reached alignment, we can copy the rest of the
+            rows.  */
+         if (IT_CHARPOS (it) == CHARPOS (start)
+             /* Don't accept "alignment" inside a display vector,
+                since start_row could have started in the middle of
+                that same display vector (thus their character
+                positions match), and we have no way of telling if
+                that is the case.  */
+             && it.current.dpvec_index < 0)
            break;
 
          if (display_line (&it))
            last_text_row = it.glyph_row - 1;
+
        }
 
       /* A value of current_y < last_visible_y means that we stopped