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

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

もずはっく日記(2012年5月)

2012年5月24日

Bug-org 447757 Up to half the keyCode assignments in keyup/keydown events are missing or wrong
初回投稿日時: 2012年05月24日14時30分38秒
カテゴリ: Mozilla Core Mozilla15 バグ修正
SNS: (list)

Keycode ReimplemtationのLinux(GTK)版です。

Linux版のキーコードは以下のルールで決定されます。

  1. GDKキーイベントのキーコードがモディファイアキーの場合、他にモディファイアキーが押されていないか、単体でそのキーを押した場合に別のモディファイアキーには変化しないなら、そのモディファイアキーのDOMキーコードを用いる。もし、単体で押した時に別のモディファイアキーとして動作するのであれば、単体で押した時のモディファイアキーにあわせたDOMキーコードを用いる
  2. 文字入力キーではない場合、そのキーを単体で押した時の機能に対応したDOMキーコードを用いる。もしこの結果が0であれば、現在のGDKキーイベントで与えられたキーコードからDOMキーコードを求める(つまりモディファイアキーで変化した機能からDOMキーコードを求める)
  3. 文字入力キーの場合、そのキー単体で入力される文字がASCIIアルファベットか、ASCIIの数字の場合、それにあったDOMキーコードを用いる
  4. それ以外の場合、そのキーとShiftキーで入力される文字がASCIIアルファベットか、ASCIIの数字の場合、それにあったDOMキーコードを用いる
  5. それ以外の場合かつ、現在のキーボードレイアウトではASCIIアルファベットが入力できない場合(具体的にはGDK_aキーでASCIIアルファベットを入力できない場合)、システムにインストールされているキーボードレイアウトの中で、ASCIIアルファベットの入力可能な最も優先順位の高いキーボードレイアウトで、そのキーが単体でASCIIアルファベットかASCIIの数字が入力可能ならそれにあったDOMキーコードを用いる。それ以外の文字の場合にはShiftキーを押した場合についても確認する
  6. それ以外の場合、現在のキーボードレイアウトで、そのキーが単体でASCII文字を入力できる場合はそれにあったDOMキーコードを用いる
  7. それ以外の場合、現在のキーボードレイアウトで、そのキーがShiftキーが押されている場合にASCII文字を入力できる場合はそれにあったDOMキーコードを用いる
  8. それ以外の場合、0

ASCIIの文字や数字以外の場合の他のキーボードレイアウトを参照するタイミングがMacとは異なっていますが、よほど特殊なキーボードレイアウト同士の組み合わせでなければこれによる差はでないと思います(この差はレビュアの考え方の差)。

Xのキーボードに関する仕様が少しアレなので、他のプラットフォームに対して非常にややこしいルールになっているように見えますが、意外と他のプラットフォームと実際には変わりません。変わるとしたら、バリバリとカスタマイズしたキーボードレイアウトをユーザが自作した場合だと思います。

ちなみに、Linux(GTK)には明確にAltGrにあたるキーが存在しているので、DOM_KEY_ALTGRというキーコードが定義されて割り当てられています。

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

bug-org 447757を含むエントリ