From d82f24ba8530eb8de04a319cc80742a0a953040e Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 12 Feb 2016 21:38:44 +0200 Subject: [PATCH] Fix redisplay after a large insertion * src/xdisp.c (redisplay_internal): Don't accept the results of "optimization 3" if the cursor ends up in a partially visible glyph row. (Bug22637) --- src/xdisp.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/xdisp.c b/src/xdisp.c index 8f1e98d99e..840699d00f 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -825,6 +825,7 @@ static Lisp_Object redisplay_window_1 (Lisp_Object); static bool set_cursor_from_row (struct window *, struct glyph_row *, struct glyph_matrix *, ptrdiff_t, ptrdiff_t, int, int); +static bool cursor_row_fully_visible_p (struct window *, bool, bool); static bool update_menu_bar (struct frame *, bool, bool); static bool try_window_reusing_current_matrix (struct window *); static int try_window_id (struct window *); @@ -13881,11 +13882,16 @@ redisplay_internal (void) eassert (this_line_vpos == it.vpos); eassert (this_line_y == it.current_y); set_cursor_from_row (w, row, w->current_matrix, 0, 0, 0, 0); + if (cursor_row_fully_visible_p (w, false, true)) + { #ifdef GLYPH_DEBUG - *w->desired_matrix->method = 0; - debug_method_add (w, "optimization 3"); + *w->desired_matrix->method = 0; + debug_method_add (w, "optimization 3"); #endif - goto update; + goto update; + } + else + goto cancel; } else goto cancel; -- 2.39.2