summaryrefslogtreecommitdiff
path: root/src/msdos.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>1999-08-10 10:43:12 +0000
committerEli Zaretskii <eliz@gnu.org>1999-08-10 10:43:12 +0000
commite30aee93e264629f010d39edd26fbaf7e31a9b1f (patch)
tree4c03fb27ec91912c0c11352837401e848956847e /src/msdos.c
parent1697ca3831112a5aa282ecbc1fd59d9bf4ab7867 (diff)
downloademacs-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.c15
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. */