# HG changeset patch # User Eli Zaretskii # Date 934279985 0 # Node ID eea9647c824657d42ca03b6936a94e7f795d0f3e # Parent 76f5f50e774209c7a93acb59ef3f251aa07164b4 (Fframe_parameters): Swap foreground and background colors returned in frame parameters if the frame has reverse in its parameter alist. (Fmake_terminal_frame): Make a unique copy of face_alist for each frame. diff -r 76f5f50e7742 -r eea9647c8246 src/frame.c --- a/src/frame.c Tue Aug 10 09:51:17 1999 +0000 +++ b/src/frame.c Tue Aug 10 10:13:05 1999 +0000 @@ -559,6 +559,7 @@ { struct frame *f; Lisp_Object frame; + Lisp_Object tem; #ifdef MSDOS if (selected_frame->output_method != output_msdos_raw) @@ -576,7 +577,15 @@ XSETFRAME (frame, f); Fmodify_frame_parameters (frame, Vdefault_frame_alist); Fmodify_frame_parameters (frame, parms); - f->face_alist = selected_frame->face_alist; + + /* Make the frame face alist be frame-specific, so that each + frame could change its face definitions independently. */ + f->face_alist = Fcopy_alist (selected_frame->face_alist); + /* Simple Fcopy_alist isn't enough, because we need the contents of + the vectors which are the CDRs of associations in face_alist to + be copied as well. */ + for (tem = f->face_alist; CONSP (tem); tem = XCDR (tem)) + XCDR (XCAR (tem)) = Fcopy_sequence (XCDR (XCAR (tem))); return frame; } @@ -1952,11 +1961,15 @@ { int fg = FRAME_FOREGROUND_PIXEL (f); int bg = FRAME_BACKGROUND_PIXEL (f); + Lisp_Object qreverse = intern ("reverse"); + int rv = + !NILP (Fassq (qreverse, alist)) + || !NILP (Fassq (qreverse, Vdefault_frame_alist)); store_in_alist (&alist, intern ("foreground-color"), - build_string (msdos_stdcolor_name (fg))); + build_string (msdos_stdcolor_name (rv ? bg : fg))); store_in_alist (&alist, intern ("background-color"), - build_string (msdos_stdcolor_name (bg))); + build_string (msdos_stdcolor_name (rv ? fg : bg))); } store_in_alist (&alist, intern ("font"), build_string ("ms-dos")); #endif