Workaround Xft BadLength X error - libsl - shared code master of various suckle… | |
git clone git://git.suckless.org/libsl | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit 53ebcb48c6b12882c6dbe352ee43c96b2fb01b84 | |
parent e1132a979e39d6cdb8c34ea5496c901a5b8c2d79 | |
Author: Thomas Spurden <[email protected]> | |
Date: Wed, 16 Jan 2019 21:51:30 +0000 | |
Workaround Xft BadLength X error | |
Modify the fontconfig pattern to prefer non-color fonts, and discard any | |
selected font which has the color flag set. Using these fonts with Xft is just | |
going to generate a BadLength X error. | |
Diffstat: | |
M drw.c | 14 ++++++++++++++ | |
1 file changed, 14 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/drw.c b/drw.c | |
@@ -132,6 +132,19 @@ xfont_create(Drw *drw, const char *fontname, FcPattern *fo… | |
die("no font specified."); | |
} | |
+ /* Do not allow using color fonts. This is a workaround for a BadLength | |
+ * error from Xft with color glyphs. Modelled on the Xterm workaround.… | |
+ * https://bugzilla.redhat.com/show_bug.cgi?id=1498269 | |
+ * https://lists.suckless.org/dev/1701/30932.html | |
+ * https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=916349 | |
+ * and lots more all over the internet. | |
+ */ | |
+ FcBool iscol; | |
+ if(FcPatternGetBool(xfont->pattern, FC_COLOR, 0, &iscol) == FcResultMa… | |
+ XftFontClose(drw->dpy, xfont); | |
+ return NULL; | |
+ } | |
+ | |
font = ecalloc(1, sizeof(Fnt)); | |
font->xfont = xfont; | |
font->pattern = pattern; | |
@@ -337,6 +350,7 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned i… | |
fcpattern = FcPatternDuplicate(drw->fonts->pattern); | |
FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset); | |
FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue); | |
+ FcPatternAddBool(fcpattern, FC_COLOR, FcFalse); | |
FcConfigSubstitute(NULL, fcpattern, FcMatchPattern); | |
FcDefaultSubstitute(fcpattern); |