Prepared 4.9 release.
authorAnselm R Garbe <anselm@garbe.ca>
Sat, 2 Feb 2019 12:54:15 +0000 (04:54 -0800)
committerAnselm R Garbe <anselm@garbe.ca>
Sat, 2 Feb 2019 12:54:15 +0000 (04:54 -0800)
LICENSE
config.mk
drw.c

diff --git a/LICENSE b/LICENSE
index d0c6d64..6ed8ad3 100644 (file)
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
 MIT/X Consortium License
 
-© 2006-2014 Anselm R Garbe <anselm@garbe.us>
+© 2006-2019 Anselm R Garbe <anselm@garbe.ca>
 © 2006-2008 Sander van Dijk <a.h.vandijk@gmail.com>
 © 2006-2007 Michał Janeczek <janeczek@gmail.com>
 © 2007 Kris Maglione <jg@suckless.org>
@@ -8,7 +8,7 @@ MIT/X Consortium License
 © 2009 Markus Schnalke <meillo@marmaro.de>
 © 2009 Evan Gates <evan.gates@gmail.com>
 © 2010-2012 Connor Lane Smith <cls@lubutu.com>
-© 2014-2018 Hiltjo Posthuma <hiltjo@codemadness.org>
+© 2014-2019 Hiltjo Posthuma <hiltjo@codemadness.org>
 © 2015-2018 Quentin Rameau <quinq@fifth.space>
 
 Permission is hereby granted, free of charge, to any person obtaining a
index ae34ad8..0929b4a 100644 (file)
--- a/config.mk
+++ b/config.mk
@@ -1,5 +1,5 @@
 # dmenu version
-VERSION = 4.8
+VERSION = 4.9
 
 # paths
 PREFIX = /usr/local
diff --git a/drw.c b/drw.c
index c638323..8fd1ca4 100644 (file)
--- 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);