From e02230bf34f6ab62c5a13cff796cd75b2b348412 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 20 Dec 2012 09:03:34 -0500 Subject: [PATCH] * src/xdisp.c (select_frame_for_redisplay, ensure_selected_frame): Remove. (redisplay_internal): Don't bother selecting the frame to get the proper value of frame-local variables. --- etc/NEWS | 4 ++++ src/ChangeLog | 6 ++++++ src/xdisp.c | 57 --------------------------------------------------- 3 files changed, 10 insertions(+), 57 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index aba06a66bd..6d97e9a577 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -156,6 +156,10 @@ It is layered as: * Incompatible Lisp Changes in Emacs 24.4 +** frame-local variables that affect redisplay do not work any more. +More specifically, the redisplay does not bother to check for a frame-local +value when looking up variables. + ** nil and "unbound" are indistinguishable in symbol-function. `symbol-function' never signals `void-function' any more. `fboundp' returns non-nil if the symbol was `fset' to nil. diff --git a/src/ChangeLog b/src/ChangeLog index e31e35c7b4..eea7d17280 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2012-12-20 Stefan Monnier + + * xdisp.c (select_frame_for_redisplay, ensure_selected_frame): Remove. + (redisplay_internal): Don't bother selecting the frame to get the + proper value of frame-local variables. + 2012-12-20 Dmitry Antipov * textprop.c (set_text_properties_1): Do not allow NULL interval. diff --git a/src/xdisp.c b/src/xdisp.c index c2789a78ef..95c858218d 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -12951,49 +12951,6 @@ reconsider_clip_changes (struct window *w, struct buffer *b) } -/* Select FRAME to forward the values of frame-local variables into C - variables so that the redisplay routines can access those values - directly. */ - -static void -select_frame_for_redisplay (Lisp_Object frame) -{ - Lisp_Object tail, tem; - Lisp_Object old = selected_frame; - struct Lisp_Symbol *sym; - - eassert (FRAMEP (frame) && FRAME_LIVE_P (XFRAME (frame))); - - selected_frame = frame; - /* If redisplay causes scrolling, it sets point in the window, so we need to - be careful with the selected-window's point handling. */ - select_window_1 (XFRAME (frame)->selected_window, 0); - - do { - for (tail = XFRAME (frame)->param_alist; - CONSP (tail); tail = XCDR (tail)) - if (CONSP (XCAR (tail)) - && (tem = XCAR (XCAR (tail)), - SYMBOLP (tem)) - && (sym = indirect_variable (XSYMBOL (tem)), - sym->redirect == SYMBOL_LOCALIZED) - && sym->val.blv->frame_local) - /* Use find_symbol_value rather than Fsymbol_value - to avoid an error if it is void. */ - find_symbol_value (tem); - } while (!EQ (frame, old) && (frame = old, 1)); -} - -/* Make sure that previously selected OLD_FRAME is selected unless it has been - deleted (by an X connection failure during redisplay, for example). */ - -static void -ensure_selected_frame (Lisp_Object frame) -{ - if (!EQ (frame, selected_frame) && FRAME_LIVE_P (XFRAME (frame))) - select_frame_for_redisplay (frame); -} - #define STOP_POLLING \ do { if (! polling_stopped_here) stop_polling (); \ polling_stopped_here = 1; } while (0) @@ -13078,12 +13035,6 @@ redisplay_internal (void) /* Remember the currently selected window. */ sw = w; - /* When running redisplay, we play a bit fast-and-loose and allow e.g. - selected_frame and selected_window to be temporarily out-of-sync so - when we come back here via `goto retry', we need to resync because we - may need to run Elisp code (via prepare_menu_bars). */ - ensure_selected_frame (old_frame); - pending = 0; reconsider_clip_changes (w, current_buffer); last_escape_glyph_frame = NULL; @@ -13491,9 +13442,6 @@ redisplay_internal (void) if (FRAME_WINDOW_P (f) || FRAME_TERMCAP_P (f) || f == sf) { - /* Select the frame, for the sake of frame-local variables. */ - ensure_selected_frame (frame); - /* Mark all the scroll bars to be removed; we'll redeem the ones we want when we redisplay their windows. */ if (FRAME_TERMINAL (f)->condemn_scroll_bars_hook) @@ -13543,10 +13491,6 @@ redisplay_internal (void) } } - /* We played a bit fast-and-loose above and allowed selected_frame - and selected_window to be temporarily out-of-sync but let's make - sure this stays contained. */ - ensure_selected_frame (old_frame); eassert (EQ (XFRAME (selected_frame)->selected_window, selected_window)); if (!pending) @@ -13772,7 +13716,6 @@ static Lisp_Object unwind_redisplay (Lisp_Object old_frame) { redisplaying_p = 0; - ensure_selected_frame (old_frame); return Qnil; } -- 2.20.1