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

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

もずはっく日記(2014年11月)

2014年11月25日

Bug-org 1077345 Make compositionend event dispatchers of widget simpler
初回投稿日時: 2014年11月25日23時35分39秒
カテゴリ: Mozilla Core Mozilla36 バグ修正
SNS: (list)

IMEが未確定文字列を確定する際、widgetは、NS_COMPOSITION_CHANGEイベントを文節情報無しで発火し、未確定文字列から文節情報を削除した後、NS_COMPOSITION_ENDイベントを発火して、エディタがこれを受け取ると、IMEからの入力を一旦打ち切る、という形になっていました。しかし、これは冗長な上に、e10sに移行すると、NS_COMPOSITION_CHANGEイベントとNS_COMPOSITION_ENDイベントの間で、今までには走り得なかった、別の処理が割り込んでくる可能性がありました(実際に起こりうるかはしりませんが、Javascriptのタイマー等)。

今回の修正で、確定用に、NS_COMPOSITION_COMMIT_AS_ISと、NS_COMPOSITION_COMMITイベントを新設しました。前者は発火時の未確定文字列をそのまま確定、後者はWidgetCompositionEvent::mDataで任意の確定文字列を指定できるようにしています。TextCompositionがこれらを受け取ると、必要に応じて、NS_COMPOSITION_UPDATEを発火し、その後、NS_COMPOSITION_CHANGEを文節情報無しで発火し、エディタ上から文節情報を取り除き、NS_COMPOSITION_ENDでエディタのIME編集モードを終了させます。

これにより、確定時のプロセス間通信は半減しました。さらに、別プロセス上で確定される場合、そのプロセス内のTextCompositionが必要なイベントを自動的に発火するので、これまでと同じ様に、イベントが連続して発火されることになります。

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

bug-org 1077345を含むエントリ