Mercurial > emacs
changeset 34246:e7acfcef56ae
(frame-set-background-mode): Avoid stomping on locally modified faces.
author | Miles Bader <miles@gnu.org> |
---|---|
date | Wed, 06 Dec 2000 05:10:35 +0000 |
parents | b31daef799a1 |
children | 6cb97dab8ee8 |
files | lisp/faces.el |
diffstat | 1 files changed, 20 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/faces.el Wed Dec 06 02:50:35 2000 +0000 +++ b/lisp/faces.el Wed Dec 06 05:10:35 2000 +0000 @@ -1395,13 +1395,26 @@ (frame-parameter frame 'display-type))) (unless (and (eq bg-mode old-bg-mode) (eq display-type old-display-type)) - (modify-frame-parameters frame - (list (cons 'background-mode bg-mode) - (cons 'display-type display-type))) - ;; For all named faces, choose face specs matching the new frame - ;; parameters. - (dolist (face (face-list)) - (face-spec-set face (face-user-default-spec face) frame))))) + (let ((locally-modified-faces nil)) + ;; Before modifying the frame parameters, we collect a list of + ;; faces that don't match what their face-spec says they should + ;; look like; we then avoid changing these faces below. A + ;; negative list is used on the assumption that most faces will + ;; be unmodified, so we can avoid consing in the common case. + (dolist (face (face-list)) + (when (not (face-spec-match-p face + (face-user-default-spec face) + (selected-frame))) + (push face locally-modified-faces))) + ;; Now change to the new frame parameters + (modify-frame-parameters frame + (list (cons 'background-mode bg-mode) + (cons 'display-type display-type))) + ;; For all named faces, choose face specs matching the new frame + ;; parameters, unless they have been locally modified. + (dolist (face (face-list)) + (unless (memq face locally-modified-faces) + (face-spec-set face (face-user-default-spec face) frame))))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;