• [^] # Re: Solution Qt

    Posté par . En réponse au message Affichage de caractères grecques UTF-8 dans Xorg. Évalué à 1.

    La doc de Xlib laisse à désirer, en effet, mais ce n'est pas aussi compliqué que ça en a l'air.
    J'ai modifié ton programme comme suit, en ajoutant pas mal de code de diagnostic, et ça a l'air de marcher. (À compiler avec -std=c99)

    #include <X11/Xlib.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <locale.h>
    int main(void) {
     printf("setlocale() -> %s\n", setlocale(LC_ALL, ""));
     Display *d = XOpenDisplay(NULL);
     if (d == NULL) {
     fprintf(stderr, "Cannot open display\n");
     exit(1);
     }
     char **missing_charset_list = NULL;
     int missing_charset_count = 0;
     char *def_string = NULL;
     XFontSet fs = XCreateFontSet(d, "*", &missing_charset_list, &missing_charset_count, &def_string);
     printf("fs = %p, def_string = %s\n", fs, def_string);
     for (int i = 0; i < missing_charset_count; ++i)
     printf("missing_charset_list[%d] = %s\n", i, missing_charset_list[i]);
     XFreeStringList(missing_charset_list);
     if (fs == NULL)
     exit(1);
     int s = DefaultScreen(d);
     char msg[] = "ΟΑΣΔΦΖΧΨΩΒzeΒ";
     Window w = XCreateSimpleWindow(d, RootWindow(d, s), 10, 10, 200, 200, 1, BlackPixel(d, s), WhitePixel(d, s));
     XMapWindow(d, w);
     XSelectInput(d, w, ExposureMask);
     while (1) {
     XEvent e;
     XNextEvent(d, &e);
     if (e.type == Expose) {
     XmbDrawString(d, w, fs, DefaultGC(d, s), 10, 20, msg, strlen(msg));
     }
     }
     XFreeFontSet(d, fs);
     XCloseDisplay(d);
     return 0;
    }