changeset 42743:1e6231c9c359

(store_frame_param): Call set_tty_color_mode for termcap frames. (do_switch_frame): For termcap frames, switch the tty color mode as specified by the frame's parameters. (Qtty_color_mode): New variable. (syms_of_frame): Intern and staticpro it.
author Eli Zaretskii <eliz@gnu.org>
date Mon, 14 Jan 2002 13:47:02 +0000
parents 73fcf65b58d3
children ecb614567352
files src/frame.c
diffstat 1 files changed, 28 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/frame.c	Mon Jan 14 13:45:36 2002 +0000
+++ b/src/frame.c	Mon Jan 14 13:47:02 2002 +0000
@@ -74,6 +74,7 @@
 Lisp_Object Qinhibit_default_face_x_resources;
 Lisp_Object Qleft_fringe;
 Lisp_Object Qright_fringe;
+Lisp_Object Qtty_color_mode;
 
 Lisp_Object Vterminal_frame;
 Lisp_Object Vdefault_frame_alist;
@@ -641,6 +642,23 @@
 
   Fselect_window (XFRAME (frame)->selected_window);
 
+#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
@@ -1926,6 +1944,14 @@
  	swap_in_global_binding (prop);
     }
 
+#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);
+#endif
+
   /* Update the frame parameter alist.  */
   old_alist_elt = Fassq (prop, f->param_alist);
   if (EQ (old_alist_elt, Qnil))
@@ -2474,6 +2500,8 @@
   staticpro (&Qleft_fringe);
   Qright_fringe = intern ("right-fringe");
   staticpro (&Qright_fringe);
+  Qtty_color_mode = intern ("tty-color-mode");
+  staticpro (&Qtty_color_mode);
 
   DEFVAR_LISP ("default-frame-alist", &Vdefault_frame_alist,
 	       doc: /* Alist of default values for frame creation.