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:
Tweet (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の変更が必要だったわけです)。