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:
Tweet (list)
e10s関係の作業でかなりストレス貯まってきたのと、レビュアが夏期休暇をとってて通常の仕事がしづらいので、気晴らしを兼ねて古いバグの修正を行うことにしました。一つ目はこのバグです。Bug-org 553975の修正によって、未確定文字列の背景色が設定されていても、キャレットが常に表示されるようになりました。しかし、これはWindowsでは不自然な描画で、特に、IMEがキャレットを未確定文字列内に表示するように指示していない時に表示するのは間違っていました。
今回の修正で、未確定文字列の文節情報の中にキャレット位置の情報が含まれていない場合、キャレットを未確定文字列の末尾に表示するのをやめるようにしました。
しかし、キャレットの表示状態はステートフルで、エディタが単純に未確定文字列の文節をセットする際にキャレットを直接非表示にしてしまうと復元することが困難だったり、ウインドウのフォーカス状態の変化により表示されるように上書きされることが予想されました。そのため、nsCaret
にはWindowsのAPIと同じ様に、非表示をオーバーライドできるメソッドを用意し、その呼び出し回数をカウントしてゼロの場合だけ従来の表示・非表示状態を用いるようにしました。これにより、エディタ以外のモジュールが非表示にしたい場合も今回の修正とバッティングすることはありません。そして、nsEditor
自身はnsCaret
の強制非表示カウントを複数回カウントアップしてしまわないように、bool
のメンバ変数を使って2回以上呼んでしまわないようにしています。
Windows以外でもキャレットを非表示にすることはもちろん可能ですが、現在、未確定文字列にキャレットを含めない指定を行っているのはWindows版のwidgetだけです(TSFモードではハングルのTIPが利用されている時のみ)。