>> So, luckily we are now a step closed to the solution:  let's not use
>> 'fixed' as coded-in-default in twm.c if TWM_USE_XFT is defined, but
>> '-*-fixed-*-*-*-*-*-*-*-*-*-*-*-*', and neither XListFonts() nor
>> XftFontOpenXlfd() have any further difficulties!  (Is XListFonts()
>> supposed to translate font alias names at all?)  This looks a good idea,
>> in fact this is what you suggested first: let XListFonts() resolve
>> 'fixed' and then use it.  Now we know how to do that. :-)
>> (As a backside, we then remove the flexibility in twm to use the
>> 'fixed'-alias-redirection to an arbitrary font.)
> First, the X server does not even start if it cannot resolve 'fixed'.  In 
> that case, whether or not `twm` starts is a moot point.
> Secondly, there are likely to be .twmrc's out there that specify other 
> aliases, such as '7x13' and so on.  Thus, it is important to fall back to a 
> raster font when Xft cannot resolve a font name, whether or not that name is 
> a default.  This makes it unnecessary to change twm's default font names.
> Marc.

The good news is, Xft is hardly going to fail.

One can easily put "A quick brown fox jumps over the lazy dog" for
TitleFont into .twmrc as an amusing proof.  So if XLFD loading fails, we
will in fact never enter the "fallback" branch in util.c in GetFont().

But anyways, on our adventurous path to save "fixed" I'll put up a one
more proposition.   What about the following code fragment at the
beginning for GetFont() in util.c?   Now "fixed", "variable", "7x13" et
cetera are fine as font names.   :-)


GetFont(MyFont *font)
#ifdef TWM_USE_XFT

    XFontStruct *xlfd;
    Atom  atom;
    char *atom_name;

    if (font->font != NULL) {
        XftFontClose (dpy, font->font);
        font->font = NULL;

    /* test if core font: */
    xlfd = XLoadQueryFont (dpy, font->name);
    if (xlfd) {
        if (XGetFontProperty (xlfd, XA_FONT, &atom) == True) {
            atom_name = XGetAtomName (dpy, atom);
            if (atom_name) {
                font->font = XftFontOpenXlfd (dpy, Scr->screen, atom_name);
                XFree (atom_name);
        XFreeFont (dpy, xlfd);

    /* next, try Xft font: */
    if (font->font == NULL)
        font->font = XftFontOpenName (dpy, Scr->screen, font->name);

    /* fallback: */




    Eeri Kask
Devel mailing list

Reply via email to