diff options
Diffstat (limited to 'src')
| -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) | |||
| 670 | unsigned long fg, bg; | 670 | unsigned long fg, bg; |
| 671 | 671 | ||
| 672 | if (!fp) | 672 | if (!fp) |
| 673 | fp = FACE_FROM_ID (selected_frame, DEFAULT_FACE_ID); | 673 | { |
| 674 | fp = FACE_FROM_ID (selected_frame, DEFAULT_FACE_ID); | ||
| 675 | /* The default face for the frame should always be realized and | ||
| 676 | cached. */ | ||
| 677 | if (!fp) | ||
| 678 | abort (); | ||
| 679 | } | ||
| 674 | screen_face = face; | 680 | screen_face = face; |
| 675 | fg = fp->foreground; | 681 | fg = fp->foreground; |
| 676 | bg = fp->background; | 682 | bg = fp->background; |
| @@ -729,6 +735,13 @@ IT_write_glyphs (struct glyph *str, int str_len) | |||
| 729 | 735 | ||
| 730 | screen_buf = screen_bp = alloca (str_len * 2); | 736 | screen_buf = screen_bp = alloca (str_len * 2); |
| 731 | screen_buf_end = screen_buf + str_len * 2; | 737 | screen_buf_end = screen_buf + str_len * 2; |
| 738 | |||
| 739 | /* Since faces get cached and uncached behind our back, we can't | ||
| 740 | rely on their indices in the cache being consistent across | ||
| 741 | invocations. So always reset the screen face to the default | ||
| 742 | face of the frame, before writing glyphs, and let the glyphs | ||
| 743 | set the right face if it's different from the default. */ | ||
| 744 | IT_set_face (DEFAULT_FACE_ID); | ||
| 732 | 745 | ||
| 733 | /* The mode bit CODING_MODE_LAST_BLOCK should be set to 1 only at | 746 | /* The mode bit CODING_MODE_LAST_BLOCK should be set to 1 only at |
| 734 | the tail. */ | 747 | the tail. */ |