From 70cccbbb358ffef338b519f590492fc9588ef858 Mon Sep 17 00:00:00 2001 From: "Kim F. Storm" Date: Fri, 1 Feb 2002 21:15:03 +0000 Subject: [PATCH] (x_erase_phys_cursor): Don't erase cursor if cursor row is invisible. This can happen if cursor is on top line of a window, and we switch to a buffer with a header line. --- src/ChangeLog | 8 ++++++++ src/w32term.c | 6 ++++++ src/xterm.c | 6 ++++++ 3 files changed, 20 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index abaf23e6951..183d10a3700 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2002-02-01 Kim F. Storm + + * xterm.c (x_erase_phys_cursor): Don't erase cursor if cursor row + is invisible. This can happen if cursor is on top line of a + window, and we switch to a buffer with a header line. + + * w32term.c (x_erase_phys_cursor): ditto. + 2002-02-01 Eli Zaretskii * coding.c (decode_composition_emacs_mule): Give up if NCOMPONENT diff --git a/src/w32term.c b/src/w32term.c index 12704fb8bc1..c9c38b51cb3 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -9383,6 +9383,12 @@ x_erase_phys_cursor (w) if (!cursor_row->enabled_p) goto mark_cursor_off; + /* If row is completely invisible, don't attempt to delete a cursor which + isn't there. This can happen if cursor is at top of a window, and + we switch to a buffer with a header line in that window. */ + if (cursor_row->visible_height <= 0) + goto mark_cursor_off; + /* This can happen when the new row is shorter than the old one. In this case, either x_draw_glyphs or clear_end_of_line should have cleared the cursor. Note that we wouldn't be diff --git a/src/xterm.c b/src/xterm.c index bda75c3f38f..993d217e03d 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -11355,6 +11355,12 @@ x_erase_phys_cursor (w) if (!cursor_row->enabled_p) goto mark_cursor_off; + /* If row is completely invisible, don't attempt to delete a cursor which + isn't there. This can happen if cursor is at top of a window, and + we switch to a buffer with a header line in that window. */ + if (cursor_row->visible_height <= 0) + goto mark_cursor_off; + /* This can happen when the new row is shorter than the old one. In this case, either x_draw_glyphs or clear_end_of_line should have cleared the cursor. Note that we wouldn't be -- 2.39.2