summaryrefslogtreecommitdiff
path: root/src/w32console.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/w32console.c')
-rw-r--r--src/w32console.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/w32console.c b/src/w32console.c
index ba022382f09..9cfedde3b3f 100644
--- a/src/w32console.c
+++ b/src/w32console.c
@@ -167,6 +167,7 @@ w32con_clear_end_of_line (struct frame *f, int end)
for (i = 0; i < glyphs_len; i++)
{
memcpy (&glyphs[i], &space_glyph, sizeof (struct glyph));
+ glyphs[i].frame = f;
}
ceol_initialized = TRUE;
}
@@ -327,14 +328,19 @@ w32con_write_glyphs (struct frame *f, register struct glyph *string,
{
/* Identify a run of glyphs with the same face. */
int face_id = string->face_id;
+ /* Since this is called to deliver the frame glyph matrix to the
+ glass, some of the glyphs might be from a child frame, which
+ affects the interpretation of face ID. */
+ struct frame *face_id_frame = string->frame;
int n;
for (n = 1; n < len; ++n)
- if (string[n].face_id != face_id)
+ if (!(string[n].face_id == face_id
+ && string[n].frame == face_id_frame))
break;
/* Turn appearance modes of the face of the run on. */
- char_attr = w32_face_attributes (f, face_id);
+ char_attr = w32_face_attributes (face_id_frame, face_id);
if (n == len)
/* This is the last run. */
@@ -530,6 +536,11 @@ static void
w32con_update_end (struct frame * f)
{
SetConsoleCursorPosition (cur_screen, cursor_coords);
+ if (!XWINDOW (selected_window)->cursor_off_p
+ && cursor_coords.X < FRAME_COLS (f))
+ w32con_show_cursor ();
+ else
+ w32con_hide_cursor ();
}
/***********************************************************************