Control: forwarded -1 https://bugs.freedesktop.org/show_bug.cgi?id=105415
Control: tags -1 + fixed-upstream patch

On 2018-04-14 10:25 +0200, Sven Joachim wrote:

> Package: libfontconfig1
> Version: 2.13.0-4
> Severity: normal
>
> After upgrading the fontconfig packages from 2.12.6-0.1, my window
> manager (icewm) does no longer show window titles and menus in bold,
> despite being configured to do so.
>
> This is the font which I have specified for window titles:
>
> ,----
> | $ fc-match "DejaVu Sans:size=10:bold"
> | DejaVuSans.ttf: "DejaVu Sans" "Book"
> `----
>
> In 2.12.6, fc-match's output is different:
>
> ,----
> | $ fc-match "DejaVu Sans:size=10:bold"
> | DejaVuSans-Bold.ttf: "DejaVu Sans" "Bold"
> `----
>
> Very likely this is the same problem as
> https://bugs.freedesktop.org/show_bug.cgi?id=105415, although they had
> the opposite problem there, getting a bold font unexpectedly.  I will
> cherry-pick the upstream fixes for that bug and rebuild fontconfig to
> see if they help.

Alright, that worked. :-)  Attached are the two patches I cherry-picked,
taken from upstream commits 198358dd8ff8 and 4699406a6832.

>From 198358dd8ff858c9e36531a7406ccb2246ae77b7 Mon Sep 17 00:00:00 2001
From: Akira TAGOH <ak...@tagoh.org>
Date: Mon, 12 Mar 2018 11:49:58 +0900
Subject: [PATCH 1/3] Allow the constant names in the range

https://bugs.freedesktop.org/show_bug.cgi?id=105415
---
 src/fcname.c | 34 +++++++++++++++++++++++++++++-----
 1 file changed, 29 insertions(+), 5 deletions(-)

diff --git a/src/fcname.c b/src/fcname.c
index 79e413e..15fb659 100644
--- a/src/fcname.c
+++ b/src/fcname.c
@@ -330,13 +330,37 @@ FcNameConvert (FcType type, FcChar8 *string)
     case FcTypeRange:
 	if (sscanf ((char *) string, "[%lg %lg]", &b, &e) != 2)
 	{
-	    v.u.d = strtod ((char *) string, &p);
-	    if (p != NULL && p[0] != 0)
+	    char *sc, *ec;
+	    size_t len = strlen ((const char *) string);
+	    int si, ei;
+
+	    sc = malloc (len);
+	    ec = malloc (len);
+	    if (sc && ec && sscanf ((char *) string, "[%s %[^]]]", sc, ec) == 2)
 	    {
-		v.type = FcTypeVoid;
-		break;
+		if (FcNameConstant ((const FcChar8 *) sc, &si) &&
+		    FcNameConstant ((const FcChar8 *) ec, &ei))
+		    v.u.r =  FcRangeCreateDouble (si, ei);
+		else
+		    goto bail1;
+	    }
+	    else
+	    {
+	    bail1:
+		v.type = FcTypeDouble;
+		if (FcNameConstant (string, &si))
+		{
+		    v.u.d = (double) si;
+		} else {
+		    v.u.d = strtod ((char *) string, &p);
+		    if (p != NULL && p[0] != 0)
+			v.type = FcTypeVoid;
+		}
 	    }
-	    v.type = FcTypeDouble;
+	    if (sc)
+		free (sc);
+	    if (ec)
+		free (ec);
 	}
 	else
 	    v.u.r = FcRangeCreateDouble (b, e);
-- 
2.17.0

>From 4699406a68321179b14fae7412f828e2f37a7033 Mon Sep 17 00:00:00 2001
From: Akira TAGOH <ak...@tagoh.org>
Date: Wed, 14 Mar 2018 18:31:30 +0900
Subject: [PATCH 3/3] Add the value of the constant name to the implicit object
 in the pattern

For objects which has been changed the object type to FcTypeRange.

https://bugs.freedesktop.org/show_bug.cgi?id=105415
---
 src/fcname.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/fcname.c b/src/fcname.c
index 15fb659..c9320ae 100644
--- a/src/fcname.c
+++ b/src/fcname.c
@@ -490,6 +490,10 @@ FcNameParse (const FcChar8 *name)
 			if (!FcPatternAddBool (pat, c->object, c->value))
 			    goto bail2;
 			break;
+		    case FcTypeRange:
+			if (!FcPatternAddInteger (pat, c->object, c->value))
+			    goto bail2;
+			break;
 		    default:
 			break;
 		    }
-- 
2.17.0

Reply via email to