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

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

もずはっく日記(2015年8月)

2015年8月9日

Bug-org 1187566 [TSF] TSFTextStore::Content should compute mMinTextModifiedOffset only with the latest composition string and original composition string
初回投稿日時: 2015年08月09日11時01分01秒
最終更新日時: 2015年08月09日11時03分38秒
カテゴリ: IME Mozilla Core Mozilla41 Mozilla42 TSF Windows
SNS: (list)

Google日本語入力の安定版では候補ウインドウ位置を決める時にITextStoreACP::GetTextExt()が失敗すると、ウインドウの左下に表示してしまうことがあるバグがあります。TS_E_NOLAYOUT問題が修正されているWindows 10でも発生しますので、Google日本語入力自体のバグのようです(開発版では修正されているとのことですが、時間がとれなくて、まだ未確認)。

元々、TS_E_NOLAYOUT問題対策でGeckoが入れているコードで、最初の文節でのみこの症状が抑えられていました。ですが、2文節目以降で発生していたので、Gecko側のこのハックに何らかの問題があるのではないかと調査してみたところ、Google日本語入力の独特の挙動により、意図通りに動いていないバグを見つけました。

Google日本語入力は、未確定文字列が変化する際に、最初に未確定文字列全部を空文字列で置き換えてきます。次に、新しい未確定文字列を挿入します。このため、TSFTextStore::Content内で、ドキュメントロック中にどの文字以降に変化があったのかを調べた際に、常に未確定文字列の最初の文字から変化しているという判定になってしまっていました。

そこで、未確定文字列がドキュメントロック中に2回以上変更されても、ロック前の未確定文字列と最新の未確定文字列を常に比較し、それまでの変更が取り消されていないかを確認するようにして対処しました。

このバグはe10sの有効・無効に関わらず発生しますので、TSFモードが最初に有効になるMozilla 41でも修正予定です(既に承認されていますが、パッチはまだ入っていない状態)。

TS_E_NOLAYOUT問題については一度ドキュメントにまとめないといけないかもしれませんね。

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

bug-org 1187566を含むエントリ