作者: Zazel
日時: 2005/5/06(23:50)
Zazelです。

=== "Bruce." <kbk@...> さんが書かれた
=== <427B62AF.8050105@...> にて

> ということで、どうもこの関数がロカールを意識した実装をされていない
> ような気がしないでもありません。実際
> 
> int XmbTextListToTextProperty(display, list, count, style, text_prop_return)
> 
> なんていう、compound_textとかカレントロカールでの変換を
> 指定できる関数もあります。
> 
> ちいさなX用のプログラムでも書ければ確かめられるんでしょうけど。
> #VMWareもインストールして、Linux(Fedora Core)とFreeBSDも用意
> #してあるのだけど止まってます(^^;

最低限だと最後に付けた感じかなあ。localeまわりは知らないので、
その手の関数は呼んでません。私がXlibで一番書いていた頃は
XStoreName()しか使ったことないし、漢字は自前の関数でフォントを
切替えながらガリガリ書いてたので。


#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>

int main() {
    Display *display;
    Window window;
    char *text;
    XTextProperty prop;
    XEvent ev;

    if ((display = XOpenDisplay(NULL)) == NULL) return 1;
    window = XCreateSimpleWindow(display,
                                 DefaultRootWindow(display),
                                 0, 0, 320, 240, 2,
                                 BlackPixel(display, 0), WhitePixel(display, 0)
                                );

    text = "Window Title Test";
    XmbTextListToTextProperty(display, &text, 1, XStdICCTextStyle, &prop);
    XSetWMName(display, window, &prop);
    XFree(prop.value);

    XSelectInput(display, window, ButtonPressMask|KeyPressMask);
    XMapWindow(display, window);
    XFlush(display);

    while (1) {
        XNextEvent(display, &ev);
        if (ev.type == ButtonPress || ev.type == KeyPress) break;
    }

    XDestroyWindow(display, window);
    XCloseDisplay(display);
    return 0;
}