diff options
| -rw-r--r-- | LICENSE | 2 | ||||
| -rw-r--r-- | config.mk | 2 | ||||
| -rw-r--r-- | drw.c | 16 | 
3 files changed, 17 insertions, 3 deletions
| @@ -1,6 +1,6 @@  MIT/X Consortium License -© 2006-2017 Anselm R Garbe <anselm@garbe.us> +© 2006-2019 Anselm R Garbe <anselm@garbe.ca>  © 2006-2009 Jukka Salmi <jukka at salmi dot ch>  © 2006-2007 Sander van Dijk <a dot h dot vandijk at gmail dot com>  © 2007-2011 Peter Hartlich <sgkkr at hartlich dot com> @@ -1,5 +1,5 @@  # dwm version -VERSION = 6.1 +VERSION = 6.2  # Customize below to fit your system @@ -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); | 
