みどりの日

gtk2 のソースを眺めてみる

over-the-spot 問題の続き. やはり,gtk2 に何かある,ということでソースを眺めてみる.

Xlib でのマクロを手がかりに探してみると,急所は gtk+-2.4.0/modules/input/gtkimcontextxim.c にあるようである.

#define ALLOWED_MASK (XIMPreeditCallbacks | XIMPreeditNothing | XIMPreeditNone | \
                      XIMStatusCallbacks | XIMStatusNothing | XIMStatusNone )

と,ウィンドウ配置メソッドについての定義マクロシンボルが見つかる.

ちなみに

XIMPreeditCallbacks
on-the-spot による前編集領域
XIMPreeditNothing
root-window に前編集領域
XIMPreeditNone
前編集領域無し
XIMStatusCallbacks
状態表示をコールバックで処理
XIMStatusNothing
root-window に状態表示
XIMStatusNone
状態表示無し

という意味であり,みごとに over-the-spot が抜けている.

このマクロは setup_styles() 内で参照されており,XIM 側から取得した構造体と and を取られている. つまり,この時点で over-the-spot は無視されていることになる.

が,一方で

#define PREEDIT_MASK (XIMPreeditCallbacks | XIMPreeditPosition | \
                      XIMPreeditArea | XIMPreeditNothing | XIMPreeditNone)

というマクロも定義されており,こちらには over-the-spot である XIMPreeditPosition がある. このマクロは choose_better_style() で参照されている. ということは,over-the-spot を全く考慮していないわけではないらしい.

一般的には,on-the-spot よりも over-the-spot のほうのプログラミングのほうが容易と言われているらしい. が,on-the-spot をサポートしているのにも関わらず,over-the-spot をサポートしていないというのもいまひとつわからないところがある. 右から左への記述なんかの国際化の絡みで敢えて落したのか,理由は良くわからない.

gtk2 と over-the-spot

ぐぐってみると,結構問題になってるようであるが,なぜここまで問題になるかは謎. kinput2 では on-the-spot 入力できているようなので,普通の人は気にならないと思うんだけど. gtk2 + kinput2 で on-the-spot 入力できるようになったのって,最近のことなのかしらん.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2004-05-09 (日) 13:08:22 (7315d)