Mercurial > emacs
comparison lisp/dynamic-setting.el @ 108115:cd095471cdae
merge trunk
author | Kenichi Handa <handa@etlken> |
---|---|
date | Mon, 26 Apr 2010 09:23:02 +0900 |
parents | lisp/font-setting.el@5e867bd030c8 |
children | 0a56ed7397f0 3226ac2da7f7 |
comparison
equal
deleted
inserted
replaced
107987:54f7ec0a9243 | 108115:cd095471cdae |
---|---|
1 ;;; dynamic-setting.el --- Support dynamic changes | |
2 | |
3 ;; Copyright (C) 2009, 2010 Free Software Foundation, Inc. | |
4 | |
5 ;; Author: Jan Djärv <jan.h.d@swipnet.se> | |
6 ;; Maintainer: FSF | |
7 ;; Keywords: font, system-font, tool-bar-style | |
8 | |
9 ;; This file is part of GNU Emacs. | |
10 | |
11 ;; GNU Emacs is free software: you can redistribute it and/or modify | |
12 ;; it under the terms of the GNU General Public License as published by | |
13 ;; the Free Software Foundation, either version 3 of the License, or | |
14 ;; (at your option) any later version. | |
15 | |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
21 ;; You should have received a copy of the GNU General Public License | |
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. | |
23 | |
24 ;;; Commentary: | |
25 | |
26 ;; This file provides the lisp part of the GConf and XSetting code in | |
27 ;; xsetting.c. But it is nothing that prevents it from being used by | |
28 ;; other configuration schemes. | |
29 | |
30 ;;; Code: | |
31 | |
32 ;;; Customizable variables | |
33 | |
34 (declare-function font-get-system-font "xsettings.c" ()) | |
35 | |
36 (defvar font-use-system-font) | |
37 | |
38 (defun font-setting-change-default-font (display-or-frame set-font) | |
39 "Change font and/or font settings for frames on display DISPLAY-OR-FRAME. | |
40 If DISPLAY-OR-FRAME is a frame, the display is the one for that frame. | |
41 | |
42 If SET-FONT is non-nil, change the font for frames. Otherwise re-apply the | |
43 current form for the frame (i.e. hinting or somesuch changed)." | |
44 | |
45 (let ((new-font (and (fboundp 'font-get-system-font) | |
46 (font-get-system-font)))) | |
47 (when new-font | |
48 ;; Be careful here: when set-face-attribute is called for the | |
49 ;; :font attribute, Emacs tries to guess the best matching font | |
50 ;; by examining the other face attributes (Bug#2476). | |
51 | |
52 (clear-font-cache) | |
53 ;; Set for current frames. Only change font for those that have | |
54 ;; the old font now. If they don't have the old font, the user | |
55 ;; probably changed it. | |
56 (dolist (f (frames-on-display-list display-or-frame)) | |
57 (if (display-graphic-p f) | |
58 (let* ((frame-font | |
59 (or (font-get (face-attribute 'default :font f | |
60 'default) :user-spec) | |
61 (frame-parameter f 'font-parameter))) | |
62 (font-to-set | |
63 (if set-font new-font | |
64 ;; else set font again, hinting etc. may have changed. | |
65 frame-font))) | |
66 (if font-to-set | |
67 (progn | |
68 (message "setting %s" font-to-set) | |
69 (set-frame-parameter f 'font-parameter font-to-set) | |
70 (set-face-attribute 'default f | |
71 :width 'normal | |
72 :weight 'normal | |
73 :slant 'normal | |
74 :font font-to-set)))))) | |
75 | |
76 ;; Set for future frames. | |
77 (set-face-attribute 'default t :font new-font) | |
78 (let ((spec (list (list t (face-attr-construct 'default))))) | |
79 (progn | |
80 (put 'default 'customized-face spec) | |
81 (custom-push-theme 'theme-face 'default 'user 'set spec) | |
82 (put 'default 'face-modified nil)))))) | |
83 | |
84 (defun dynamic-setting-handle-config-changed-event (event) | |
85 "Handle config-changed-event on the display in EVENT. | |
86 Changes can be | |
87 The monospace font. If `font-use-system-font' is nil, the font | |
88 is not changed. | |
89 Xft parameters, like DPI and hinting. | |
90 The tool bar style." | |
91 (interactive "e") | |
92 (let ((type (nth 1 event)) | |
93 (display-name (nth 2 event))) | |
94 (cond ((and (eq type 'monospace-font-name) font-use-system-font) | |
95 (font-setting-change-default-font display-name t)) | |
96 | |
97 ((eq type 'font-render) | |
98 (font-setting-change-default-font display-name nil)) | |
99 | |
100 ((eq type 'tool-bar-style) (force-mode-line-update t))))) | |
101 | |
102 (define-key special-event-map [config-changed-event] | |
103 'dynamic-setting-handle-config-changed-event) | |
104 | |
105 ;; arch-tag: 3a57e78f-1cd6-48b6-ab75-98f160dcc017 |