This diff works for me with some fonts (fixed, snap, even verdana),
but doesn't work with terminus (black squares instead of chars).

Index: app/cwm/calmwm.c
===================================================================
RCS file: /cvs/xenocara/app/cwm/calmwm.c,v
retrieving revision 1.54
diff -u -p -u -r1.54 calmwm.c
--- app/cwm/calmwm.c    11 May 2011 13:53:51 -0000      1.54
+++ app/cwm/calmwm.c    27 May 2011 12:35:51 -0000
@@ -30,6 +30,7 @@
 #include <string.h>
 #include <stdio.h>
 #include <unistd.h>
+#include <locale.h>
 
 #include "calmwm.h"
 
@@ -61,6 +62,8 @@ main(int argc, char **argv)
        const char      *conf_file = NULL;
        char            *display_name = NULL;
        int              ch;
+
+       setlocale(LC_CTYPE, "");
 
        while ((ch = getopt(argc, argv, "c:d:")) != -1) {
                switch (ch) {
Index: app/cwm/font.c
===================================================================
RCS file: /cvs/xenocara/app/cwm/font.c,v
retrieving revision 1.14
diff -u -p -u -r1.14 font.c
--- app/cwm/font.c      11 May 2011 13:53:51 -0000      1.14
+++ app/cwm/font.c      27 May 2011 12:35:51 -0000
@@ -66,7 +66,7 @@ font_width(struct screen_ctx *sc, const 
 {
        XGlyphInfo       extents;
 
-       XftTextExtents8(X_Dpy, sc->font, (const XftChar8*)text,
+       XftTextExtentsUtf8(X_Dpy, sc->font, (unsigned char*)text,
            len, &extents);
 
        return (extents.xOff);
@@ -77,9 +77,8 @@ font_draw(struct screen_ctx *sc, const c
     Drawable d, int x, int y)
 {
        XftDrawChange(sc->xftdraw, d);
-       /* Really needs to be UTF8'd. */
-       XftDrawString8(sc->xftdraw, &sc->xftcolor, sc->font, x, y,
-           (const FcChar8*)text, len);
+       XftDrawStringUtf8(sc->xftdraw, &sc->xftcolor, sc->font, x, y,
+           (const unsigned char*)text, len);
 }
 
 XftFont *

-- 
Alexander Polakov | plhk.ru

Reply via email to