From: Eli Zaretskii Date: Fri, 12 Feb 2016 19:38:44 +0000 (+0200) Subject: Fix redisplay after a large insertion X-Git-Tag: emacs-25.0.91~11 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=d82f24b;p=emacs.git 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) --- diff --git a/src/xdisp.c b/src/xdisp.c index 8f1e98d99ef..840699d00fb 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;