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

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

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

2015年8月26日

Bug-org 555642 [IMM32][TSF] Shouldn't paint caret during composition when the caret is in selected clause
初回投稿日時: 2015年08月26日23時04分49秒
最終更新日時: 2015年08月26日23時06分37秒
カテゴリ: IME Mozilla Core Mozilla43 Windows バグ修正
SNS: (list)

e10s関係の作業でかなりストレス貯まってきたのと、レビュアが夏期休暇をとってて通常の仕事がしづらいので、気晴らしを兼ねて古いバグの修正を行うことにしました。一つ目はこのバグです。Bug-org 553975の修正によって、未確定文字列の背景色が設定されていても、キャレットが常に表示されるようになりました。しかし、これはWindowsでは不自然な描画で、特に、IMEがキャレットを未確定文字列内に表示するように指示していない時に表示するのは間違っていました。

今回の修正で、未確定文字列の文節情報の中にキャレット位置の情報が含まれていない場合、キャレットを未確定文字列の末尾に表示するのをやめるようにしました。

しかし、キャレットの表示状態はステートフルで、エディタが単純に未確定文字列の文節をセットする際にキャレットを直接非表示にしてしまうと復元することが困難だったり、ウインドウのフォーカス状態の変化により表示されるように上書きされることが予想されました。そのため、nsCaretにはWindowsのAPIと同じ様に、非表示をオーバーライドできるメソッドを用意し、その呼び出し回数をカウントしてゼロの場合だけ従来の表示・非表示状態を用いるようにしました。これにより、エディタ以外のモジュールが非表示にしたい場合も今回の修正とバッティングすることはありません。そして、nsEditor自身はnsCaretの強制非表示カウントを複数回カウントアップしてしまわないように、boolのメンバ変数を使って2回以上呼んでしまわないようにしています。

Windows以外でもキャレットを非表示にすることはもちろん可能ですが、現在、未確定文字列にキャレットを含めない指定を行っているのはWindows版のwidgetだけです(TSFモードではハングルのTIPが利用されている時のみ)。

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

bug-org 555642を含むエントリ