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

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

もずはっく日記(2005年5月)

2005年5月15日

Bug 4437 テキストの選択範囲をIMEで上書きした後undoすると、選択範囲直後の文字を失う
初回投稿日時: 2005年05月15日02時07分15秒
最終更新日時: 2005年05月15日14時07分42秒
カテゴリ: Mozilla Core
SNS: (list)

負け戦気分。

かなり重大なバグなので調査したものの、Mozillaのエディタのトランザクション処理が複雑すぎて理解できない。デバッグで追いかけてみると、IMETextTxnがうまくマージされていないため、本来、ひとつにまとまっているべき、複数のIMEトランザクションが分裂してしまっている上、Undo/Redoはこれらがひとつにまとまっている前提で動作しているという不一致が原因なのは分かった。しかし、そこまで。

個人的にhelpwanted。

とりあえず原因となるif文は完全に特定できた。

編集開始時点で選択範囲があれば、トランザクションのマージを許可しない、という条件文だったのだが、これが問題。「入力中」という状態の無い、通常のテキスト入力ではうまく機能していたが、ユーザにとってはひとつのトランザクションで無数のトランザクションを生み出すIMEではこれはうまく機能していなかったわけだ。

ということで、blameで、なぜそのif文が追加されたのかを確認した上で、削除したパッチを作ってみた。 現在、review申請中だ。

できあがってから検証してみたら、パッチ適用後の方が「直感的な」トランザクションが構成される。 これで良いのかもしれない。

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

bug 4437を含むエントリ