From dee8674414fae2323fd9cbf05aa762e72fa575e5 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 23 Feb 2017 21:17:04 -0500 Subject: [PATCH] Minor redisplay optimisations * src/frame.c (Ficonify_frame): No need to redisplay everything. * src/xdisp.c (overlay_arrows_changed_p): Add `set_redisplay' argument. (redisplay_internal): Use it to avoid redisplaying everything. (try_window_id): Use it keep the same behavior as before. --- src/frame.c | 3 --- src/xdisp.c | 18 +++++++++++------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/frame.c b/src/frame.c index d0f653fc762..5e1e2f19906 100644 --- a/src/frame.c +++ b/src/frame.c @@ -2156,9 +2156,6 @@ If omitted, FRAME defaults to the currently selected frame. */) #endif } - /* Make menu bar update for the Buffers and Frames menus. */ - windows_or_buffers_changed = 17; - return Qnil; } diff --git a/src/xdisp.c b/src/xdisp.c index e59934d2d5a..b0ff627c70e 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -13336,7 +13336,7 @@ overlay_arrow_in_current_buffer_p (void) has changed. */ static bool -overlay_arrows_changed_p (void) +overlay_arrows_changed_p (bool set_redisplay) { Lisp_Object vlist; @@ -13356,7 +13356,12 @@ overlay_arrows_changed_p (void) Fget (var, Qlast_arrow_position)) || ! (pstr = overlay_arrow_string_or_property (var), EQ (pstr, Fget (var, Qlast_arrow_string)))) - return true; + { + if (set_redisplay) + bset_redisplay (XMARKER (val)->buffer); + else + return true; + } } return false; } @@ -13781,10 +13786,9 @@ redisplay_internal (void) /* If specs for an arrow have changed, do thorough redisplay to ensure we remove any arrow that should no longer exist. */ - if (overlay_arrows_changed_p ()) - /* Apparently, this is the only case where we update other windows, - without updating other mode-lines. */ - windows_or_buffers_changed = 49; + /* Apparently, this is the only case where we update other windows, + without updating other mode-lines. */ + overlay_arrows_changed_p (true); consider_all_windows_p = (update_mode_lines || windows_or_buffers_changed); @@ -18282,7 +18286,7 @@ try_window_id (struct window *w) /* Can't use this if overlay arrow position and/or string have changed. */ - if (overlay_arrows_changed_p ()) + if (overlay_arrows_changed_p (false)) GIVE_UP (12); /* When word-wrap is on, adding a space to the first word of a -- 2.39.5