こんにちは、樋口です。
皆様にアドバイスをいただき、大変ありがとうございました。
pTk/mTk/Unix/tkUnixWm.cを修正してからmakeすることで、(ActivePerlと同
様に)Windowのタイトルに日本語を表示できるようになりました。
GNOMEでもKDEでも、ja_JP.eucJPでもja_JP.UTF-8でも大丈夫でした。また、
quarts-wm(Mac OS X)でも大丈夫でした。
以下、修正の経緯・内容です。
# お恥ずかしいことに、C言語はほとんど触ったことがなかったので、
# おっかなびっくり試してみました。
まず、Zazelさんにお書きいただいたコードを試したところ、ごくわずかの
修正で、Windowのタイトルに日本語を表示することができました。
修正内容は、冒頭に
#include <locale.h>
を付け足し、main()の冒頭に
setlocale(LC_CTYPE, "");
を付け足しただけです。
ということで、Bruce.さんに教えていただいたpTk/mTk/Unix/tkUnixWm.cの
該当箇所を修正しました。
if (XStringListToTextProperty((char **)&string, 1,
&textProp) != 0) {
XSetWMName(winPtr->display, wmPtr->wrapperPtr->window,
&textProp);
XFree((char *) textProp.value);
}
上のようになっていた部分を、下記のように変更しました。
setlocale(LC_CTYPE, "");
XmbTextListToTextProperty(winPtr->display, (char **)&string,
1, XStdICCTextStyle, &textProp);
XSetWMName(winPtr->display, wmPtr->wrapperPtr->window, &textProp);
XFree((char *) textProp.value);
もう一カ所、同様の変更を行いました。
if (XStringListToTextProperty(&string, 1,
&textProp) != 0) {
XSetWMName(winPtr->display, wmPtr->wrapperPtr->window,
&textProp);
XFree((char *) textProp.value);
}
上のようになっていた部分を、下記のように変更しました。
setlocale(LC_CTYPE, "");
XmbTextListToTextProperty(winPtr->display, &string, 1,
XStdICCTextStyle, &textProp);
XSetWMName(winPtr->display, wmPtr->wrapperPtr->window, &textProp);
XFree(textProp.value);
最後に、冒頭に
#include <locale.h>
を書き加えてお終いです。
なお、ウィンドウのタイトルを設定している部分(変更した部分)の真上に、
Tcl_UtfToExternalDString(NULL, string, -1, &ds);
string = Tcl_DStringValue(&ds);
のようなコードがありました。printf (string);で確かめたところ、localeに
あわせて文字コードを変換するということまでは行われていたようです。よっ
て、XStringListToTextPropertyからXmbTextListToTextPropertyに変えるだけ
で上手く行ったようです。
以上、お礼と報告までに。
樋口 (http://hey.to/KO-ichi)