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:
Tweet (list)
以前にも紹介しましたが、LinuxのGTK (GDK)では、キーイベントが発生した段階では、モディファイアのフラグがそのキーが押された状態を反映した値に変化していません。例えば、Shiftキーを押したイベントの、モディファイアフラグの値は、Shiftキーが押された状態にはなっていません。これは、他のプラットフォームの動作とは異なっているため、Geckoでは、キーのハードウェアキーコードから、アクティブになるフラグを予想して、わざわざセットする、ということをやっていました。
しかし、その処理にバグがあり、JISキーボードで、CapsLockキーをShift+英数に割り当てている場合、Shiftキー無しで、英数キーだけを押した場合に、KeyboardEvent.getModifierKey("CapsLock")
がtrue
を返していました。
今回の修正では、ハッキーな推測をやめ、XKB Extentionのモディファイアフラグの変更イベントをキーイベントを受け取ったときに、キューに来ていないか調査し、存在する場合には補完するというコードになりました。これで同種のバグがあったとしても一掃されているはずです。