- return (xfs->per_char[index].ascent + xfs->per_char[index].descent > 0 ||
- xfs->per_char[index].width > 0);
+static int x11_font_has_glyph(XFontStruct *xfs, int byte1, int byte2)
+{
+ /*
+ * Not to be confused with x11font_has_glyph, which is a method of
+ * the x11font 'class' and hence takes a unifont as argument. This
+ * is the low-level function which grubs about in an actual
+ * XFontStruct to see if a given glyph exists.
+ *
+ * We must do this ourselves rather than letting Xlib's
+ * XTextExtents16 do the job, because XTextExtents will helpfully
+ * substitute the font's default_char for any missing glyph and
+ * not tell us it did so, which precisely won't help us find out
+ * which glyphs _are_ missing.
+ */
+ const XCharStruct *xcs = x11_char_struct(xfs, byte1, byte2);
+ return (xcs->ascent + xcs->descent > 0 || xcs->width > 0);