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

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

もずはっく日記(2016年3月)

2016年3月24日

Bug-org 1154183 nsXBLWindowKeyHandler shouldn't fire keydown events in content when following keypress event is "reserved" by XUL <command> element
初回投稿日時: 2016年10月15日22時14分26秒
最終更新日時: 2016年10月16日10時28分20秒
カテゴリ: Events KeyboardEvent Mozilla Core Mozilla48 バグ修正
SNS: (list)

Bug-org 1203059の修正により、予約済みのショートカットキーにマッチするkeypressイベントはWebコンテンツ上では発火されなくなりました。しかし、keydownイベントは引き続き発火されるままなので、keydownイベントのpreventDefault()を呼び出すことにより、相変わらず、予約されているショートカットキーを無効化できてしまいます。

この修正では、予約されているショートカットキーは、keydownイベントの段階で処理ハンドリングされるように修正しました。このため、chromeスクリプト内といえども、予約されているキーコンビネーションではそもそもkeypressイベント自体が発火しなくなっています。

この修正では、予約されているショートカットキーのkeydownイベントも、nsXBLWindowKeyHandlerによって、Webコンテンツ上ではデフォルトグループのリスナを実行しないように修正されました。また、副作用を抑えるために、keydownはそのまま流し、keypressイベントを従来通りに処理するように修正しています。

また、"key hell"に対応するため、各widgetのTextEventDispatcherListener::WillDispatchKeyboardEvent()を修正し、eKeyDownイベントの場合もmAlternativeCharCodesに様々なモディファイアキーの状態の際に入力される文字の情報をセットするようにし、また、その最初に、続いて発生するeKeyPressイベントのmCharCode値にあたるものをセットするようにしています(この修正のために、Bug-org 1137572の修正や、それに付随した各OS向けのwidgetの変更が必要だったわけです)。

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

bug-org 1154183を含むエントリ