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

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

もずはっく日記(2013年9月)

2013年9月30日

Bug-org 768287 keydown event's getModifierState() returns wrong value on GTK if the key has lockable modifier but the keyval doesn't correspond to a DOM modifier
初回投稿日時: 2013年09月30日21時47分58秒
最終更新日時: 2013年09月30日21時48分20秒
カテゴリ: Events GTK Mozilla Core Mozilla26 バグ修正
SNS: (list)

以前にも紹介しましたが、LinuxのGTK (GDK)では、キーイベントが発生した段階では、モディファイアのフラグがそのキーが押された状態を反映した値に変化していません。例えば、Shiftキーを押したイベントの、モディファイアフラグの値は、Shiftキーが押された状態にはなっていません。これは、他のプラットフォームの動作とは異なっているため、Geckoでは、キーのハードウェアキーコードから、アクティブになるフラグを予想して、わざわざセットする、ということをやっていました。

しかし、その処理にバグがあり、JISキーボードで、CapsLockキーをShift+英数に割り当てている場合、Shiftキー無しで、英数キーだけを押した場合に、KeyboardEvent.getModifierKey("CapsLock")trueを返していました。

今回の修正では、ハッキーな推測をやめ、XKB Extentionのモディファイアフラグの変更イベントをキーイベントを受け取ったときに、キューに来ていないか調査し、存在する場合には補完するというコードになりました。これで同種のバグがあったとしても一掃されているはずです。

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

bug-org 768287を含むエントリ