Mercurial > emacs
diff src/frame.c @ 93883:722fdbc7a012
* xdisp.c (redisplay_internal): Reset tty's color_mode when switching
to another frame.
* frame.c (do_switch_frame): Refine the top_frame/async_visible code.
Don't call set_tty_color_mode.
(store_frame_param): Reset previous_frame rather than call
set_tty_color_mode.
* term.c (set_tty_color_mode): Rewrite.
* dispextern.h (set_tty_color_mode): New type.
* termchar.h (struct tty_display_info): Add `previous_color_mode'.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Wed, 09 Apr 2008 03:25:14 +0000 |
parents | ed10c3092847 |
children | 75fb6b489ec6 |
line wrap: on
line diff
--- a/src/frame.c Tue Apr 08 22:13:13 2008 +0000 +++ b/src/frame.c Wed Apr 09 03:25:14 2008 +0000 @@ -869,11 +869,11 @@ if (!for_deletion && FRAME_HAS_MINIBUF_P (sf)) resize_mini_window (XWINDOW (FRAME_MINIBUF_WINDOW (sf)), 1); - if (FRAME_TERMCAP_P (XFRAME (selected_frame)) - && FRAME_TERMCAP_P (XFRAME (frame)) - && FRAME_TTY (XFRAME (selected_frame)) == FRAME_TTY (XFRAME (frame))) + if (FRAME_TERMCAP_P (XFRAME (frame))) { - XFRAME (selected_frame)->async_visible = 2; /* obscured */ + if (FRAMEP (FRAME_TTY (XFRAME (frame))->top_frame)) + /* Mark previously displayed frame as now obscured. */ + XFRAME (FRAME_TTY (XFRAME (frame))->top_frame)->async_visible = 2; XFRAME (frame)->async_visible = 1; FRAME_TTY (XFRAME (frame))->top_frame = frame; } @@ -884,23 +884,6 @@ Fselect_window (XFRAME (frame)->selected_window, Qnil); -#ifndef WINDOWSNT - /* Make sure to switch the tty color mode to that of the newly - selected frame. */ - sf = SELECTED_FRAME (); - if (FRAME_TERMCAP_P (sf)) - { - Lisp_Object color_mode_spec, color_mode; - - color_mode_spec = assq_no_quit (Qtty_color_mode, sf->param_alist); - if (CONSP (color_mode_spec)) - color_mode = XCDR (color_mode_spec); - else - color_mode = make_number (0); - set_tty_color_mode (sf, color_mode); - } -#endif /* !WINDOWSNT */ - /* We want to make sure that the next event generates a frame-switch event to the appropriate frame. This seems kludgy to me, but before you take it out, make sure that evaluating something like @@ -2302,11 +2285,13 @@ } #ifndef WINDOWSNT - /* The tty color mode needs to be set before the frame's parameter - alist is updated with the new value, because set_tty_color_mode - wants to look at the old mode. */ - if (FRAME_TERMCAP_P (f) && EQ (prop, Qtty_color_mode)) - set_tty_color_mode (f, val); + /* The tty color needed to be set before the frame's parameter + alist was updated with the new value. This is not true any more, + but we still do this test early on. */ + if (FRAME_TERMCAP_P (f) && EQ (prop, Qtty_color_mode) + && f == FRAME_TTY (f)->previous_frame) + /* Force redisplay of this tty. */ + FRAME_TTY (f)->previous_frame = NULL; #endif /* Update the frame parameter alist. */