1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-04 08:47:11 +00:00

* 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.
This commit is contained in:
Stefan Monnier 2012-12-20 09:03:34 -05:00
parent 006faa4118
commit e02230bf34
3 changed files with 10 additions and 57 deletions

View File

@ -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.

View File

@ -1,3 +1,9 @@
2012-12-20 Stefan Monnier <monnier@iro.umontreal.ca>
* 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 <dmantipov@yandex.ru>
* textprop.c (set_text_properties_1): Do not allow NULL interval.

View File

@ -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;
}