From d88f23882b66243b42d79e0fe897f99f8125c7c4 Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Tue, 4 Jan 2022 19:07:29 -0700 Subject: [PATCH v2] Skip virtual FcPattern entries for variable weight fonts * src/ftfont.c (ftfont_list): Pass FC_VARIABLE to FcObjectSetBuild. * src/ftfont.c (ftfont_pattern_entity): Skip meta/virtual FcPattern entries for variable weight fonts (Bug#52888). --- src/ftfont.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/ftfont.c b/src/ftfont.c index 2bdcce306b..6bfbc50ffa 100644 --- a/src/ftfont.c +++ b/src/ftfont.c @@ -189,6 +189,19 @@ ftfont_pattern_entity (FcPattern *p, Lisp_Object extra) return Qnil; if (FcPatternGetInteger (p, FC_INDEX, 0, &idx) != FcResultMatch) return Qnil; +#ifdef FC_VARIABLE + FcRange *range; + if (FcPatternGetRange (p, FC_WEIGHT, 0, &range) == FcResultMatch + && FcPatternGetBool (p, FC_VARIABLE, 0, &b) == FcResultMatch + && b == FcTrue) + /* This is a virtual/meta FcPattern for a variable weight font, + from which it is possible to extract an FcRange value + specifying the minimum and maximum weights available in this + file. We don't need to know that information explicitly, so + skip it. We will be called with an FcPattern for each actually + available, non-virtual weight. */ + return Qnil; +#endif /* FC_VARIABLE */ file = (char *) str; key = Fcons (build_unibyte_string (file), make_fixnum (idx)); @@ -863,6 +876,9 @@ ftfont_list (struct frame *f, Lisp_Object spec) #if defined HAVE_XFT && defined FC_COLOR FC_COLOR, #endif +#ifdef FC_VARIABLE + FC_VARIABLE, +#endif /* FC_VARIABLE */ NULL); if (! objset) goto err; -- 2.30.2