remove `declare' macro
[bpt/emacs.git] / lisp / dynamic-setting.el
index cfa1053..15929db 100644 (file)
@@ -1,9 +1,9 @@
 ;;; dynamic-setting.el --- Support dynamic changes
 
-;; Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
 
 ;; Author: Jan Djärv <jan.h.d@swipnet.se>
-;; Maintainer: FSF
+;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: font, system-font, tool-bar-style
 ;; Package: emacs
 
@@ -42,51 +42,37 @@ If DISPLAY-OR-FRAME is a frame, the display is the one for that frame.
 
 If SET-FONT is non-nil, change the font for frames.  Otherwise re-apply the
 current form for the frame (i.e. hinting or somesuch changed)."
-
   (let ((new-font (and (fboundp 'font-get-system-font)
-                      (font-get-system-font))))
-    (when new-font
-      ;; Be careful here: when set-face-attribute is called for the
-      ;; :font attribute, Emacs tries to guess the best matching font
-      ;; by examining the other face attributes (Bug#2476).
-
+                      (font-get-system-font)))
+       (frame-list (frames-on-display-list display-or-frame)))
+    (when (and new-font (display-graphic-p display-or-frame))
       (clear-font-cache)
-      ;; Set for current frames. Only change font for those that have
-      ;; the old font now. If they don't have the old font, the user
-      ;; probably changed it.
-      (dolist (f (frames-on-display-list display-or-frame))
-       (if (display-graphic-p f)
-           (let* ((frame-font
-                   (or (font-get (face-attribute 'default :font f
-                                                 'default) :user-spec)
-                       (frame-parameter f 'font-parameter)))
-                  (font-to-set
-                   (if set-font new-font
-                     ;; else set font again, hinting etc. may have changed.
-                     frame-font)))
-             (if font-to-set
-                 (progn
-                   (set-frame-parameter f 'font-parameter font-to-set)
-                   (set-face-attribute 'default f
-                                       :width 'normal
-                                       :weight 'normal
-                                       :slant 'normal
-                                       :font font-to-set))))))
-
-      ;; Set for future frames.
-      (set-face-attribute 'default t :font new-font)
-      (let ((spec (list (list t (face-attr-construct 'default)))))
-       (progn
-         (put 'default 'customized-face spec)
-         (custom-push-theme 'theme-face 'default 'user 'set spec)
-         (put 'default 'face-modified nil))))))
+      (if set-font
+         ;; Set the font on all current and future frames, as though
+         ;; the `default' face had been "set for this session":
+         (set-frame-font new-font nil frame-list)
+       ;; Just redraw the existing fonts on all frames:
+       (dolist (f frame-list)
+         (let ((frame-font
+                (or (font-get (face-attribute 'default :font f 'default)
+                              :user-spec)
+                    (frame-parameter f 'font-parameter))))
+           (when frame-font
+             (set-frame-parameter f 'font-parameter frame-font)
+             (set-face-attribute 'default f
+                                 :width 'normal
+                                 :weight 'normal
+                                 :slant 'normal
+                                 :font frame-font))))))))
 
 (defun dynamic-setting-handle-config-changed-event (event)
   "Handle config-changed-event on the display in EVENT.
 Changes can be
   The monospace font. If `font-use-system-font' is nil, the font
     is not changed.
+  The normal font.
   Xft parameters, like DPI and hinting.
+  The Gtk+ theme name.
   The tool bar style."
   (interactive "e")
   (let ((type (nth 1 event))
@@ -107,4 +93,3 @@ Changes can be
 (define-key special-event-map [config-changed-event]
   'dynamic-setting-handle-config-changed-event)
 
-;; arch-tag: 3a57e78f-1cd6-48b6-ab75-98f160dcc017