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

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

もずはっく日記(2010年11月)

2010年11月13日

Bug-org 591890 Focus element from mouseDown event doesn't work when the focus is set to an chrome element
初回投稿日時: 2010年11月13日13時11分27秒
カテゴリ: Mozilla Core バグ修正
SNS: (list)

Bug 6609の修正によるregressionで、chromeにフォーカスがある時に、contentのmousedownイベントハンドラで、同じdocument内の別の要素にフォーカスをセットしようとしてもできない、というバグです。

chromeにフォーカスがある場合、contentはフォーカスを奪えなくなりましたが、ここにタイミングの問題がありました。

Geckoはmousedownイベントの処理の最終段階、つまり、全関連要素でmousedownイベントが発生した後の処理でフォーカスの移動処理を行います。このため、chromeにフォーカスがある場合に、content内のどこかでマウスのボタンを押しても、そのmousedowneイベントのハンドラが呼ばれた段階では、まだchromeがフォーカスを持っていて、そのハンドラの権限ではフォーカスを奪うことができない、という形でハマってしまっていました。

今回の修正では、mousedownイベントの内部処理の初期段階でnsFocusManagerにmousedown中のdocumentを通知するようにしました。そしてnsFocusManagerでは、mousedownイベント中のdocumentのハンドラがフォーカス移動処理の呼び出しもとであるなら、chromeからのフォーカス奪取を許可するように修正しました。

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

bug-org 591890を含むエントリ