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

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

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

2015年4月17日

Bug-org 1137539 [TSF] Workaround for TS_E_NOLAYOUT bug of <= Windows 8.1 may need to check different TIP name for different language Windows
初回投稿日時: 2015年04月17日10時39分55秒
最終更新日時: 2015年04月17日10時58分39秒
カテゴリ: Mozilla Core Mozilla40 TSF Windows バグ修正
SNS: (list)

TSFには、ITextStoreACP::GetTextExt()から、TS_E_NOLAYOUTを返しても、TIPにはE_FAILが返されてしまうので、レイアウトの再計算の終了を待つことができないというバグがあります(このバグはWindows 10では修正されている模様)。

このバグに個別に対応するため、問題が判明しているTIPの名前ごとに、必要なハックを用いて、「それっぽい位置」を返して、問題が無いかのように見せていますが、Google日本語入力の存在で、Windowsの言語が変わると、TIPの名前も変わっている可能性があることが分かりました。そこで、これまでにハックを行ったTIPを全て、そのターゲットとしている言語バージョンのWindowsと、英語版のWindowsで名前を確認していきました。

幸い、Google日本語入力以外では、Windowsの言語に関係無く、同じ文字列が名前として利用されていましたので、このバグ修正では、それぞれを確認するためのコードをTSFStaticSinkのメソッドにしてしまうことで、定数まみれだったコードを綺麗にしています。

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

bug-org 1137539を含むエントリ