Bug-org 1043182 IMEContentObserver::CharacterDataChanged() doesn't convert new lines in replaced and inserted text to native new lines
初回投稿日時: 2014年07月31日23時39分16秒
カテゴリ: Mozilla Core Mozilla34 TSF Windows バグ修正
SNS:
Tweet (list)
台湾でメジャーらしい、ChangJieというIMEがあるのですが、<textarea>
要素内で改行を挿入直後に、そのまま入力すると、前の行の行頭に入力されてしまうというバグです。何故かBug-org 496360を修正するパッチのうちのいくつかを適用したら再現するようになりました。
テキストノードの一部が変更された場合、IMEContentObserver
のmutation observerの、CharacterDataChanged()
が呼び出されるのですが、この際に、変更によって削除される範囲と、追加されるテキストの長さを計算する時に、改行文字をCRLF
の二文字として計算していなかったことでした。
これにより、改行を挿入した際に、本来なら二文字追加されていると、TSFに通知しないといけないところを、一文字だけ追加された、と通知していたわけです。しかし、選択位置を調べて見ると、それとはまた違った、一文字分、後ろのオフセットが返されるという矛盾した状態になっていました。
TSFに変更箇所を通知する際に、きちんと、改行文字をWindowsでのみ二文字としてカウントするように修正しています。