aboutsummaryrefslogtreecommitdiff
path: root/drw.c
diff options
context:
space:
mode:
authorAnselm R Garbe <anselm@garbe.ca>2019-02-02 04:54:15 -0800
committerAnselm R Garbe <anselm@garbe.ca>2019-02-02 04:54:15 -0800
commit65be875f5adf31e9c4762ac8a8d74b1dfdd78584 (patch)
tree8d047b2f0f6deb56efe6ec9a5c411f2e250cfccd /drw.c
parent7d19b2055d98e5c0249efe582c852b8b8b30cd41 (diff)
downloaddmenu-65be875f5adf31e9c4762ac8a8d74b1dfdd78584.tar.gz
dmenu-65be875f5adf31e9c4762ac8a8d74b1dfdd78584.tar.bz2
dmenu-65be875f5adf31e9c4762ac8a8d74b1dfdd78584.zip
Prepared 4.9 release.4.9
Diffstat (limited to 'drw.c')
-rw-r--r--drw.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/drw.c b/drw.c
index c638323..8fd1ca4 100644
--- a/drw.c
+++ b/drw.c
@@ -132,6 +132,19 @@ xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
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. See
+ * 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) == FcResultMatch && iscol) {
+ XftFontClose(drw->dpy, xfont);
+ return NULL;
+ }
+
font = ecalloc(1, sizeof(Fnt));
font->xfont = xfont;
font->pattern = pattern;
@@ -200,7 +213,7 @@ drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
Clr *ret;
/* need at least two colors for a scheme */
- if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(Clr))))
+ if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(XftColor))))
return NULL;
for (i = 0; i < clrcount; i++)
@@ -337,6 +350,7 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
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);