# HG changeset patch # User Richard M. Stallman # Date 1130112516 0 # Node ID fcb2ec449238ab7db3bc64735fa86ce0e8b1211e # Parent 5c93b07e7478b4e7c21b20e0923dd097f3058e46 (inhibit-face-set-after-frame-default): New variable. (set-face-attribute): Bind it. (face-set-after-frame-default): Test it. diff -r 5c93b07e7478 -r fcb2ec449238 lisp/faces.el --- a/lisp/faces.el Sun Oct 23 22:58:33 2005 +0000 +++ b/lisp/faces.el Mon Oct 24 00:08:36 2005 +0000 @@ -33,7 +33,6 @@ (autoload 'xw-defined-colors "x-win")) (defvar help-xref-stack-item) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Font selection. @@ -547,6 +546,9 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(defvar inhibit-face-set-after-frame-default nil + "If non-nil, that tells `face-set-after-frame-default' to do nothing.") + (defun set-face-attribute (face frame &rest args) "Set attributes of FACE on FRAME from ARGS. @@ -677,9 +679,12 @@ (if (memq where '(0 t)) (put (or (get face 'face-alias) face) 'face-modified t)) (while args - (internal-set-lisp-face-attribute face (car args) - (purecopy (cadr args)) - where) + ;; Don't recursively set the attributes from the frame's font param + ;; when we update the frame's font param fro the attributes. + (let ((inhibit-face-set-after-frame-default t)) + (internal-set-lisp-face-attribute face (car args) + (purecopy (cadr args)) + where)) (setq args (cdr (cdr args)))))) @@ -1730,23 +1735,23 @@ (delete-frame frame))) frame)) - (defun face-set-after-frame-default (frame) "Set frame-local faces of FRAME from face specs and resources. Initialize colors of certain faces from frame parameters." - (if (face-attribute 'default :font t) - (set-face-attribute 'default frame :font - (face-attribute 'default :font t)) - (set-face-attribute 'default frame :family - (face-attribute 'default :family t)) - (set-face-attribute 'default frame :height - (face-attribute 'default :height t)) - (set-face-attribute 'default frame :slant - (face-attribute 'default :slant t)) - (set-face-attribute 'default frame :weight - (face-attribute 'default :weight t)) - (set-face-attribute 'default frame :width - (face-attribute 'default :width t))) + (unless inhibit-face-set-after-frame-default + (if (face-attribute 'default :font t) + (set-face-attribute 'default frame :font + (face-attribute 'default :font t)) + (set-face-attribute 'default frame :family + (face-attribute 'default :family t)) + (set-face-attribute 'default frame :height + (face-attribute 'default :height t)) + (set-face-attribute 'default frame :slant + (face-attribute 'default :slant t)) + (set-face-attribute 'default frame :weight + (face-attribute 'default :weight t)) + (set-face-attribute 'default frame :width + (face-attribute 'default :width t)))) (dolist (face (face-list)) ;; Don't let frame creation fail because of an invalid face spec. (condition-case ()