]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix redisplay after a large insertion
authorEli Zaretskii <eliz@gnu.org>
Fri, 12 Feb 2016 19:38:44 +0000 (21:38 +0200)
committerEli Zaretskii <eliz@gnu.org>
Fri, 12 Feb 2016 19:38:44 +0000 (21:38 +0200)
* 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

index 8f1e98d99ef5df80ba23a84c94084292ec4edf7e..840699d00fba60638cd67ffdec4b5b688607d753 100644 (file)
@@ -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;