]> git.eshelyaron.com Git - emacs.git/commitdiff
Ignore color fonts when using Xft
authorRobert Pluim <rpluim@gmail.com>
Tue, 3 Apr 2018 09:06:01 +0000 (11:06 +0200)
committerRobert Pluim <rpluim@gmail.com>
Tue, 5 Jun 2018 12:08:08 +0000 (14:08 +0200)
* src/font.c (syms_of_font): New configuration variable
xft-ignore-color-fonts, default t.
* src/ftfont.c (ftfont_spec_pattern): Tell fontconfig to ignore
color fonts if xft-ignore-color-fonts is t.  (Bug#30874, Bug#30045)
* etc/NEWS: Document xft-ignore-color-fonts.

etc/NEWS
src/font.c
src/ftfont.c

index 873e2dfd1dcf5d5bd2c7e6ffd41a885e6440e96a..2bec8de0ea4ba7a0a095b4f6b63bad5cca7c7dd1 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -31,6 +31,12 @@ in its NEWS.)
 \f
 * Changes in Emacs 26.2
 
+---
+** New variable 'xft-ignore-color-fonts'.
+Default t means don't try to load color fonts when using Xft, as they
+often cause crashes.  Set it to nil if you really need those fonts.
+(Bug#30874)
+
 \f
 * Editing Changes in Emacs 26.2
 
index e53935a15ccd1180ff229d657f0c9999cf7440b0..305bb14576affc1544671ac42f4b93ce1700d133 100644 (file)
@@ -5476,6 +5476,13 @@ Disabling compaction of font caches might enlarge the Emacs memory
 footprint in sessions that use lots of different fonts.  */);
   inhibit_compacting_font_caches = 0;
 
+  DEFVAR_BOOL ("xft-ignore-color-fonts",
+              Vxft_ignore_color_fonts,
+              doc: /*
+Non-nil means don't query fontconfig for color fonts, since they often
+cause Xft crashes.  Only has an effect in Xft builds.  */);
+  Vxft_ignore_color_fonts = 1;
+
 #ifdef HAVE_WINDOW_SYSTEM
 #ifdef HAVE_FREETYPE
   syms_of_ftfont ();
index c2e093e633d533cf7583787242c3134e5c95d32f..24a92dd52e8a987b307b4c148bdc30cf9e5068ae 100644 (file)
@@ -764,6 +764,13 @@ ftfont_spec_pattern (Lisp_Object spec, char *otlayout, struct OpenTypeSpec **ots
   if (scalable >= 0
       && ! FcPatternAddBool (pattern, FC_SCALABLE, scalable ? FcTrue : FcFalse))
     goto err;
+#ifdef HAVE_XFT
+  /* We really don't like color fonts, they cause Xft crashes.  See
+     Bug#30874.  */
+  if (Vxft_ignore_color_fonts
+      && ! FcPatternAddBool(pattern, FC_COLOR, FcFalse))
+    goto err;
+#endif
 
   goto finish;