# HG changeset patch # User Chong Yidong # Date 1160069621 0 # Node ID 108f4a391eaaea8859396aea520e86294a7bdd80 # Parent de889a66a184b1d29e719e7d126378ad98d198ff * frame.c (Qinhibit_face_set_after_frame_default): New var. (syms_of_frame): Initialize it. (x_set_frame_parameters): Avoid resetting :font attributes to the new-frame defaults. diff -r de889a66a184 -r 108f4a391eaa src/ChangeLog --- a/src/ChangeLog Thu Oct 05 16:23:42 2006 +0000 +++ b/src/ChangeLog Thu Oct 05 17:33:41 2006 +0000 @@ -1,3 +1,10 @@ +2006-10-05 Chong Yidong + + * frame.c (Qinhibit_face_set_after_frame_default): New var. + (syms_of_frame): Initialize it. + (x_set_frame_parameters): Avoid resetting :font attributes to the + new-frame defaults. + 2006-10-03 Stefan Monnier * lisp.h (clear_regexp_cache): Declare. diff -r de889a66a184 -r 108f4a391eaa src/frame.c --- a/src/frame.c Thu Oct 05 16:23:42 2006 +0000 +++ b/src/frame.c Thu Oct 05 17:33:41 2006 +0000 @@ -109,6 +109,7 @@ Lisp_Object Qfullscreen, Qfullwidth, Qfullheight, Qfullboth; +Lisp_Object Qinhibit_face_set_after_frame_default; Lisp_Object Qface_set_after_frame_default; @@ -2729,12 +2730,20 @@ || EQ (prop, Qfullscreen)) { register Lisp_Object param_index, old_value; + int count = SPECPDL_INDEX (); old_value = get_frame_param (f, prop); fullscreen_is_being_set |= EQ (prop, Qfullscreen); if (NILP (Fequal (val, old_value))) { + /* For :font attributes, the frame_parm_handler + x_set_font calls `face-set-after-frame-default'. + Unless we bind inhibit-face-set-after-frame-default + here, this would reset the :font attribute that we + just applied to the default value for new faces. */ + specbind (Qinhibit_face_set_after_frame_default, Qt); + store_frame_param (f, prop, val); param_index = Fget (prop, Qx_frame_parameter); @@ -2743,6 +2752,8 @@ < sizeof (frame_parms)/sizeof (frame_parms[0])) && rif->frame_parm_handlers[XINT (param_index)]) (*(rif->frame_parm_handlers[XINT (param_index)])) (f, val, old_value); + + unbind_to (count, Qnil); } } } @@ -4004,6 +4015,10 @@ Qface_set_after_frame_default = intern ("face-set-after-frame-default"); staticpro (&Qface_set_after_frame_default); + Qinhibit_face_set_after_frame_default + = intern ("inhibit-face-set-after-frame-default"); + staticpro (&Qinhibit_face_set_after_frame_default); + Qfullwidth = intern ("fullwidth"); staticpro (&Qfullwidth); Qfullheight = intern ("fullheight");