mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-04-29 01:33:29 -07:00
(select_frame_for_redisplay): New function.
(redisplay_internal): Record also selected_frame for unwind_redisplay. Call select_frame_for_redisplay before redrawing each frame. (unwind_redisplay): Argument changed to a cons.
This commit is contained in:
parent
fa091c040c
commit
dd429b0302
2 changed files with 64 additions and 4 deletions
|
|
@ -1,3 +1,11 @@
|
|||
2003-11-13 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* xdisp.c (select_frame_for_redisplay): New function.
|
||||
(redisplay_internal): Record also selected_frame for
|
||||
unwind_redisplay. Call select_frame_for_redisplay before
|
||||
redrawing each frame.
|
||||
(unwind_redisplay): Argument changed to a cons.
|
||||
|
||||
2003-11-12 Luc Teirlinck <teirllm@auburn.edu>
|
||||
|
||||
* fns.c (Fstring_to_multibyte): Doc fix.
|
||||
|
|
|
|||
60
src/xdisp.c
60
src/xdisp.c
|
|
@ -814,6 +814,7 @@ static int message_log_check_duplicate P_ ((int, int, int, int));
|
|||
static void push_it P_ ((struct it *));
|
||||
static void pop_it P_ ((struct it *));
|
||||
static void sync_frame_with_window_matrix_rows P_ ((struct window *));
|
||||
static void select_frame_for_redisplay P_ ((Lisp_Object));
|
||||
static void redisplay_internal P_ ((int));
|
||||
static int echo_area_display P_ ((int));
|
||||
static void redisplay_windows P_ ((Lisp_Object));
|
||||
|
|
@ -9542,6 +9543,44 @@ reconsider_clip_changes (w, 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 (frame)
|
||||
Lisp_Object frame;
|
||||
{
|
||||
Lisp_Object tail, sym, val;
|
||||
Lisp_Object old = selected_frame;
|
||||
|
||||
selected_frame = frame;
|
||||
|
||||
for (tail = XFRAME (frame)->param_alist; CONSP (tail); tail = XCDR (tail))
|
||||
if (CONSP (XCAR (tail))
|
||||
&& (sym = XCAR (XCAR (tail)),
|
||||
SYMBOLP (sym))
|
||||
&& (sym = indirect_variable (sym),
|
||||
val = SYMBOL_VALUE (sym),
|
||||
(BUFFER_LOCAL_VALUEP (val)
|
||||
|| SOME_BUFFER_LOCAL_VALUEP (val)))
|
||||
&& XBUFFER_LOCAL_VALUE (val)->check_frame)
|
||||
Fsymbol_value (sym);
|
||||
|
||||
for (tail = XFRAME (old)->param_alist; CONSP (tail); tail = XCDR (tail))
|
||||
if (CONSP (XCAR (tail))
|
||||
&& (sym = XCAR (XCAR (tail)),
|
||||
SYMBOLP (sym))
|
||||
&& (sym = indirect_variable (sym),
|
||||
val = SYMBOL_VALUE (sym),
|
||||
(BUFFER_LOCAL_VALUEP (val)
|
||||
|| SOME_BUFFER_LOCAL_VALUEP (val)))
|
||||
&& XBUFFER_LOCAL_VALUE (val)->check_frame)
|
||||
Fsymbol_value (sym);
|
||||
}
|
||||
|
||||
|
||||
#define STOP_POLLING \
|
||||
do { if (! polling_stopped_here) stop_polling (); \
|
||||
polling_stopped_here = 1; } while (0)
|
||||
|
|
@ -9607,7 +9646,8 @@ redisplay_internal (preserve_echo_area)
|
|||
/* Record a function that resets redisplaying_p to its old value
|
||||
when we leave this function. */
|
||||
count = SPECPDL_INDEX ();
|
||||
record_unwind_protect (unwind_redisplay, make_number (redisplaying_p));
|
||||
record_unwind_protect (unwind_redisplay,
|
||||
Fcons (make_number (redisplaying_p), selected_frame));
|
||||
++redisplaying_p;
|
||||
specbind (Qinhibit_free_realized_faces, Qnil);
|
||||
|
||||
|
|
@ -10021,6 +10061,11 @@ redisplay_internal (preserve_echo_area)
|
|||
|
||||
if (FRAME_WINDOW_P (f) || f == sf)
|
||||
{
|
||||
if (! EQ (frame, selected_frame))
|
||||
/* Select the frame, for the sake of frame-local
|
||||
variables. */
|
||||
select_frame_for_redisplay (frame);
|
||||
|
||||
#ifdef HAVE_WINDOW_SYSTEM
|
||||
if (clear_face_cache_count % 50 == 0
|
||||
&& FRAME_WINDOW_P (f))
|
||||
|
|
@ -10273,13 +10318,20 @@ redisplay_preserve_echo_area (from_where)
|
|||
/* Function registered with record_unwind_protect in
|
||||
redisplay_internal. Reset redisplaying_p to the value it had
|
||||
before redisplay_internal was called, and clear
|
||||
prevent_freeing_realized_faces_p. */
|
||||
prevent_freeing_realized_faces_p. It also selects the previously
|
||||
selected frame. */
|
||||
|
||||
static Lisp_Object
|
||||
unwind_redisplay (old_redisplaying_p)
|
||||
Lisp_Object old_redisplaying_p;
|
||||
unwind_redisplay (val)
|
||||
Lisp_Object val;
|
||||
{
|
||||
Lisp_Object old_redisplaying_p, old_frame;
|
||||
|
||||
old_redisplaying_p = XCAR (val);
|
||||
redisplaying_p = XFASTINT (old_redisplaying_p);
|
||||
old_frame = XCDR (val);
|
||||
if (! EQ (old_frame, selected_frame))
|
||||
select_frame_for_redisplay (old_frame);
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue