LCOV - code coverage report
Current view: top level - lisp - dynamic-setting.el (source / functions) Hit Total Coverage
Test: tramp-tests.info Lines: 0 24 0.0 %
Date: 2017-08-27 09:44:50 Functions: 0 2 0.0 %

          Line data    Source code
       1             : ;;; dynamic-setting.el --- Support dynamic changes
       2             : 
       3             : ;; Copyright (C) 2009-2017 Free Software Foundation, Inc.
       4             : 
       5             : ;; Author: Jan Djärv <jan.h.d@swipnet.se>
       6             : ;; Maintainer: emacs-devel@gnu.org
       7             : ;; Keywords: font, system-font, tool-bar-style
       8             : ;; Package: emacs
       9             : 
      10             : ;; This file is part of GNU Emacs.
      11             : 
      12             : ;; GNU Emacs is free software: you can redistribute it and/or modify
      13             : ;; it under the terms of the GNU General Public License as published by
      14             : ;; the Free Software Foundation, either version 3 of the License, or
      15             : ;; (at your option) any later version.
      16             : 
      17             : ;; GNU Emacs is distributed in the hope that it will be useful,
      18             : ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
      19             : ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      20             : ;; GNU General Public License for more details.
      21             : 
      22             : ;; You should have received a copy of the GNU General Public License
      23             : ;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
      24             : 
      25             : ;;; Commentary:
      26             : 
      27             : ;; This file provides the lisp part of the GConf and XSetting code in
      28             : ;; xsetting.c.  But it is nothing that prevents it from being used by
      29             : ;; other configuration schemes.
      30             : 
      31             : ;;; Code:
      32             : 
      33             : ;;; Customizable variables
      34             : 
      35             : (declare-function font-get-system-font "xsettings.c" ())
      36             : 
      37             : (defvar font-use-system-font)
      38             : 
      39             : (defun font-setting-change-default-font (display-or-frame set-font)
      40             :   "Change font and/or font settings for frames on display DISPLAY-OR-FRAME.
      41             : If DISPLAY-OR-FRAME is a frame, the display is the one for that frame.
      42             : 
      43             : If SET-FONT is non-nil, change the font for frames.  Otherwise re-apply the
      44             : current form for the frame (i.e. hinting or somesuch changed)."
      45           0 :   (let ((new-font (and (fboundp 'font-get-system-font)
      46           0 :                        (font-get-system-font)))
      47           0 :         (frame-list (frames-on-display-list display-or-frame)))
      48           0 :     (when (and new-font (display-graphic-p display-or-frame))
      49           0 :       (clear-font-cache)
      50           0 :       (if set-font
      51             :           ;; Set the font on all current and future frames, as though
      52             :           ;; the `default' face had been "set for this session":
      53           0 :           (set-frame-font new-font nil frame-list)
      54             :         ;; Just redraw the existing fonts on all frames:
      55           0 :         (dolist (f frame-list)
      56           0 :           (let ((frame-font
      57           0 :                  (or (font-get (face-attribute 'default :font f 'default)
      58           0 :                                :user-spec)
      59           0 :                      (frame-parameter f 'font-parameter))))
      60           0 :             (when frame-font
      61           0 :               (set-frame-parameter f 'font-parameter frame-font)
      62           0 :               (set-face-attribute 'default f
      63             :                                   :width 'normal
      64             :                                   :weight 'normal
      65             :                                   :slant 'normal
      66           0 :                                   :font frame-font))))))))
      67             : 
      68             : (defun dynamic-setting-handle-config-changed-event (event)
      69             :   "Handle config-changed-event on the display in EVENT.
      70             : Changes can be
      71             :   The monospace font. If `font-use-system-font' is nil, the font
      72             :     is not changed.
      73             :   The normal font.
      74             :   Xft parameters, like DPI and hinting.
      75             :   The Gtk+ theme name.
      76             :   The tool bar style."
      77             :   (interactive "e")
      78           0 :   (let ((type (nth 1 event))
      79           0 :         (display-name (nth 2 event)))
      80           0 :     (cond ((and (eq type 'monospace-font-name) font-use-system-font)
      81           0 :            (font-setting-change-default-font display-name t))
      82             : 
      83           0 :           ((eq type 'font-render)
      84           0 :            (font-setting-change-default-font display-name nil))
      85             : 
      86             :           ;; This is a bit heavy, ideally we would just clear faces
      87             :           ;; on the affected display, and perhaps only the relevant
      88             :           ;; faces.  Oh well.
      89           0 :           ((eq type 'theme-name) (clear-face-cache))
      90             : 
      91           0 :           ((eq type 'tool-bar-style) (force-mode-line-update t)))))
      92             : 
      93             : (define-key special-event-map [config-changed-event]
      94             :   'dynamic-setting-handle-config-changed-event)
      95             : 

Generated by: LCOV version 1.12