From 65a0a738476acb1a7103602ee3e6c041108b6c91 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 30 Mar 2012 11:45:27 +0300 Subject: [PATCH] Fix bug #11068 with window display when default face was remapped. src/xdisp.c (append_space_for_newline): If the default face was remapped, use the remapped face for the appended newline. (extend_face_to_end_of_line): Use the remapped default face for extending the face to the end of the line. (display_line): Call extend_face_to_end_of_line when the default face was remapped. --- src/ChangeLog | 9 +++++++++ src/xdisp.c | 24 +++++++++++++++++------- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e57b1af1b8b..cbf9abd0ea1 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,12 @@ +2012-03-30 Eli Zaretskii + + * xdisp.c (append_space_for_newline): If the default face was + remapped, use the remapped face for the appended newline. + (extend_face_to_end_of_line): Use the remapped default face for + extending the face to the end of the line. + (display_line): Call extend_face_to_end_of_line when the default + face was remapped. (Bug#11068) + 2012-03-29 Eli Zaretskii * s/ms-w32.h: Discourage from defining HAVE_GETCWD. diff --git a/src/xdisp.c b/src/xdisp.c index 97364e785cb..118480a20ae 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -18172,8 +18172,10 @@ append_space_for_newline (struct it *it, int default_face_p) it->c = it->char_to_display = ' '; it->len = 1; + /* If the default face was remapped, be sure to use the + remapped face for the appended newline. */ if (default_face_p) - it->face_id = DEFAULT_FACE_ID; + it->face_id = lookup_basic_face (it->f, DEFAULT_FACE_ID); else if (it->face_before_selective_p) it->face_id = it->saved_face_id; face = FACE_FROM_ID (it->f, it->face_id); @@ -18209,7 +18211,7 @@ append_space_for_newline (struct it *it, int default_face_p) static void extend_face_to_end_of_line (struct it *it) { - struct face *face; + struct face *face, *default_face; struct frame *f = it->f; /* If line is already filled, do nothing. Non window-system frames @@ -18223,6 +18225,9 @@ extend_face_to_end_of_line (struct it *it) && !it->glyph_row->continued_p)) return; + /* The default face, possibly remapped. */ + default_face = FACE_FROM_ID (f, lookup_basic_face (f, DEFAULT_FACE_ID)); + /* Face extension extends the background and box of IT->face_id to the end of the line. If the background equals the background of the frame, we don't have to do anything. */ @@ -18260,7 +18265,7 @@ extend_face_to_end_of_line (struct it *it) if (it->glyph_row->used[TEXT_AREA] == 0) { it->glyph_row->glyphs[TEXT_AREA][0] = space_glyph; - it->glyph_row->glyphs[TEXT_AREA][0].face_id = it->face_id; + it->glyph_row->glyphs[TEXT_AREA][0].face_id = face->id; it->glyph_row->used[TEXT_AREA] = 1; } #ifdef HAVE_WINDOW_SYSTEM @@ -18296,7 +18301,7 @@ extend_face_to_end_of_line (struct it *it) face, to avoid painting the rest of the window with the region face, if the region ends at ZV. */ if (it->glyph_row->ends_at_zv_p) - it->face_id = DEFAULT_FACE_ID; + it->face_id = default_face->id; else it->face_id = face->id; append_stretch_glyph (it, make_number (0), stretch_width, @@ -18329,7 +18334,7 @@ extend_face_to_end_of_line (struct it *it) avoid painting the rest of the window with the region face, if the region ends at ZV. */ if (it->glyph_row->ends_at_zv_p) - it->face_id = DEFAULT_FACE_ID; + it->face_id = default_face->id; else it->face_id = face->id; @@ -18993,8 +18998,13 @@ display_line (struct it *it) /* A row that displays right-to-left text must always have its last face extended all the way to the end of line, even if this row ends in ZV, because we still write to - the screen left to right. */ - if (row->reversed_p) + the screen left to right. We also need to extend the + last face if the default face is remapped to some + different face, otherwise the functions that clear + portions of the screen will clear with the default face's + background color. */ + if (row->reversed_p + || lookup_basic_face (it->f, DEFAULT_FACE_ID) != DEFAULT_FACE_ID) extend_face_to_end_of_line (it); break; } -- 2.11.4.GIT