この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2013年2月)

2013年2月28日

Bug-org 840409 Implement IMEHandler which hides nsIMM32Handler and nsTextStore from non-IME handlers
初回投稿日時: 2013年02月28日19時25分23秒
カテゴリ: Mozilla Core Mozilla22 TSF Windows バグ修正
SNS: (list)

WindowsのIMM用のモジュールである、nsIMM32Handlerと、TSF用のモジュールであるnsTextStoreへのアクセスをnsWindow等から個別に行っていましたが、ここで、片方の状態だけを確認したり、TSFモードでもIMMのコードが呼ばれていたりと、色々とバグが多いという問題がありました。

こういった問題を解決するために、mozilla::widget::IMEHandlerというクラスを作成し、nsWindow等、IMEのハンドラ以外からはこのクラスを経由してIMEの処理を行うように改善しました。

widget::IMEHandlerは、自動的にnsIMM32Handlerを呼び出すべきなのか、nsTextStoreを呼び出すべきなのかを判断し、原則としてどちらかのみで動作します。

このバグの副作用により、TSFモードでは、ATOK 2013の候補ウインドウの位置が、ATOK 2012と同様に、奇妙な位置に表示されることがあるという現象が確認されています。オーナーがあるウインドウ上、例えば設定ダイアログ上では問題が一切無かったり、他のIMEでも問題はありません。また、TSFの仕様では座標位置はウインドウに対する相対位置ではなく、スクリーン座標で返している、また、問題が出ないケースもあるので、Gecko側の問題ではないように思えますが、なんとも不思議な状況ではあります。

関連するかもしれないエントリ

bug-org 840409を含むエントリ