みどりの日 *gtk2 のソースを眺めてみる [#h295530b] 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 [#x2c74ec2] ぐぐってみると,結構問題になってるようであるが,なぜここまで問題になるかは謎. kinput2 では on-the-spot 入力できているようなので,普通の人は気にならないと思うんだけど. gtk2 + kinput2 で on-the-spot 入力できるようになったのって,最近のことなのかしらん. *本日のツッコミ [#j45cb103] #comment