* src/xdisp.c (select_frame_for_redisplay, ensure_selected_frame): Remove.
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 20 Dec 2012 14:03:34 +0000 (09:03 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 20 Dec 2012 14:03:34 +0000 (09:03 -0500)
(redisplay_internal): Don't bother selecting the frame to get the
proper value of frame-local variables.

etc/NEWS
src/ChangeLog
src/xdisp.c

index aba06a6..6d97e9a 100644 (file)
--- 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.
index e31e35c..eea7d17 100644 (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.
index c2789a7..95c8582 100644 (file)
@@ -12951,49 +12951,6 @@ reconsider_clip_changes (struct window *w, struct buffer *b)
 }
 \f
 
-/* 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;
 }