From 3390454c621048dcd996f497aba5e807c49dcfaf Mon Sep 17 00:00:00 2001 From: YAMAMOTO Mitsuharu Date: Sat, 10 Sep 2011 15:54:04 +0900 Subject: [PATCH] * xdisp.c (expose_window): Save original value of phys_cursor_on_p and turn window cursor on if cleared (Bug#9415). --- src/ChangeLog | 5 +++++ src/xdisp.c | 12 ++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 52f41c4cd73..fa31b3d6f0e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2011-09-10 YAMAMOTO Mitsuharu + + * xdisp.c (expose_window): Save original value of phys_cursor_on_p + and turn window cursor on if cleared (Bug#9415). + 2011-09-07 Andreas Schwab * search.c (boyer_moore): Take unibyte characters from pattern diff --git a/src/xdisp.c b/src/xdisp.c index b8a8ea7484d..ebd660acc06 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -24249,7 +24249,7 @@ expose_window (w, fr) { int yb = window_text_bottom_y (w); struct glyph_row *row; - int cursor_cleared_p; + int cursor_cleared_p, phys_cursor_on_p; struct glyph_row *first_overlapping_row, *last_overlapping_row; TRACE ((stderr, "expose_window (%d, %d, %d, %d)\n", @@ -24269,6 +24269,13 @@ expose_window (w, fr) else cursor_cleared_p = 0; + /* If the row containing the cursor extends face to end of line, + then expose_area might overwrite the cursor outside the + rectangle and thus notice_overwritten_cursor might clear + w->phys_cursor_on_p. We remember the original value and + check later if it is changed. */ + phys_cursor_on_p = w->phys_cursor_on_p; + /* Update lines intersecting rectangle R. */ first_overlapping_row = last_overlapping_row = NULL; for (row = w->current_matrix->rows; @@ -24335,7 +24342,8 @@ expose_window (w, fr) x_draw_vertical_border (w); /* Turn the cursor on again. */ - if (cursor_cleared_p) + if (cursor_cleared_p + || (phys_cursor_on_p && !w->phys_cursor_on_p)) update_window_cursor (w, 1); } } -- 2.39.5