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

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

もずはっく日記(2016年1月)

2016年1月30日

Bug-org 1237216 [TSF] Unnecessary composition events are raised when typing Korean characters
初回投稿日時: 2016年01月30日22時29分37秒
カテゴリ: IME Mozilla Core Mozilla46 TSF Windows バグ修正
SNS: (list)

ハングル用のMS-IMEは、TSFモードではCompositionEventがおかしな発火のされ方になるというバグです。具体的には二文字目を入力開始すると一文字目が確定されるのですが、その間に、compositionstartcompositionendがワンセットで発火されます。

ハングル用のMS-IMEは日本語とも中国語とも全然違う動作を行うTIPで、二文字目の入力が行われた時に一文字目の未確定文字列処理を確定しないまま、二文字目の範囲を新たな未確定文字列の範囲として指示して来ます。この時に未確定文字列の先頭のオフセットが変更になってしまうので、DOMイベント的には、一度、compositionを終了し、新しいcompositionを開始するしかありません。

そのため、二文字目の入力が開始された時にTSFTextStoreは一文字目の編集を終了し、強制確定させてから、新たな未確定文字列の編集処理を開始するのですが、その直後にTIPから一文字目の確定処理が通知されます。この際に、キューに入れるcompositionendが実際に文字列を変更していない場合、すでにキューに入れているcompositionstartから削除してしまうことで修正に成功しました。

TSF-awareなアプリを書かれる方は、他言語のTIPとはあまりに動作が異なっている、ハングルのTIPでのテストは十分に行った方が良いです。

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

bug-org 1237216を含むエントリ