diff options
author | Eli Zaretskii <eliz@gnu.org> | 1999-08-10 10:43:12 +0000 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 1999-08-10 10:43:12 +0000 |
commit | e30aee93e264629f010d39edd26fbaf7e31a9b1f (patch) | |
tree | 4c03fb27ec91912c0c11352837401e848956847e /src/msdos.c | |
parent | 1697ca3831112a5aa282ecbc1fd59d9bf4ab7867 (diff) | |
download | emacs-e30aee93e264629f010d39edd26fbaf7e31a9b1f.tar.gz |
(IT_set_face): Abort if the default face is not realized
and cached.
(IT_write_glyphs): Reset the screen face to the default face
before writing glyphs.
Diffstat (limited to 'src/msdos.c')
-rw-r--r-- | src/msdos.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/msdos.c b/src/msdos.c index b73b8e7a5f7..1cea4af486c 100644 --- a/src/msdos.c +++ b/src/msdos.c @@ -670,7 +670,13 @@ IT_set_face (int face) unsigned long fg, bg; if (!fp) - fp = FACE_FROM_ID (selected_frame, DEFAULT_FACE_ID); + { + fp = FACE_FROM_ID (selected_frame, DEFAULT_FACE_ID); + /* The default face for the frame should always be realized and + cached. */ + if (!fp) + abort (); + } screen_face = face; fg = fp->foreground; bg = fp->background; @@ -729,6 +735,13 @@ IT_write_glyphs (struct glyph *str, int str_len) screen_buf = screen_bp = alloca (str_len * 2); screen_buf_end = screen_buf + str_len * 2; + + /* Since faces get cached and uncached behind our back, we can't + rely on their indices in the cache being consistent across + invocations. So always reset the screen face to the default + face of the frame, before writing glyphs, and let the glyphs + set the right face if it's different from the default. */ + IT_set_face (DEFAULT_FACE_ID); /* The mode bit CODING_MODE_LAST_BLOCK should be set to 1 only at the tail. */ |