summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>2011-09-10 15:54:04 +0900
committerYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>2011-09-10 15:54:04 +0900
commit3390454c621048dcd996f497aba5e807c49dcfaf (patch)
treeff00816edadc8a6eda5f875c2fbab074790db3a0
parentedb7b4dc8b089385d8b0d12081227fc416fae23e (diff)
downloademacs-3390454c621048dcd996f497aba5e807c49dcfaf.tar.gz
* xdisp.c (expose_window): Save original value of phys_cursor_on_p and turn window cursor on if cleared (Bug#9415).
-rw-r--r--src/ChangeLog5
-rw-r--r--src/xdisp.c12
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 <mituharu@math.s.chiba-u.ac.jp>
+
+ * 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 <schwab@linux-m68k.org>
* 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);
}
}