ものがたり(旧)

atsushieno.hatenablog.com に続く

winformsの日本語入力サポートは大体できた

X11上のwinformsの日本語入力がそろそろ実用可能なものになるはず(僕のパッチが適用できれば完了)。とりあえず現在trunkに入っているコードの問題は:

  • ほとんどのIMエンジンでそもそもUIが表示されない(scimだけ表示される。これはXRootWindowを使っているっぽい)。XCreateIC()で指定しているfocus windowがmapされていないとUIが表示されず、focus windowは入力専用ウィンドウなので基本的にmapされないというのが問題。これを解決するにはclientWindowごとにXICを作ることになる。
  • preedit positionの座標がずれている。これはXSetICValues()に渡すXNSpotLocationの問題でもあり、XTranslateCoordinates()の使い方の問題でもある。XNSpotLocationの値は、XNFocusWindowが指定されている場合はfocus windowの座標としての、そうでなければclient windowの座標としての値になる。上記の通り、mapされていないfocus windowを指定しても意味がないので、focus windowにもclient windowを渡す…というより、そもそもXNFocusWindowを指定せずにclient windowの座標を渡すだけにするのが妥当だろう。

あと、preedit positionを有効化したことで表に出てきたwinforms本体の問題がいくつかあって、その辺はMLに投げた

というわけで、その辺の問題を全部解決したパッチはこちら:
http://monoport.com/10999

firefoxgtk-immoduleではon-the-spotモードが使えるけど、Windows Formsはover-the-spotで動いているし、めんどくさいのでパス。それよか次の作業をさせてもらいたいw

まあ、Mono 2.0にはなんとか間に合いそうで良かった。