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

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

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

2013年5月9日

CSS Level 3 text-decoration-(line|color|style)の実験 初回投稿日時: 2013年05月09日13時19分47秒
最終更新日時: 2013年05月09日13時50分00秒
カテゴリ: CSS
固定リンク: id=2013050900
リンク元: 0件
SNS: (list)

text with dashed and half-transparent-red underline, line-through and overline

text with doubled and orange underline, line-through and overline

text with wavy and green underline, line-through and overline

2013年5月31日

Bug-org 865566 Separator key on NumPad of Brazilian keyboard should cause "Separator" key value 初回投稿日時: 2013年05月31日19時32分18秒
カテゴリ: Events Mozilla Core Mozilla23 Windows バグ修正
固定リンク: id=2013053100
リンク元: 0件
SNS: (list)

MacのJISキーボードや、ブラジルのキーボードは、テンキーに、千単位での区切り文字(日本語ならカンマ)を入力するキーがあります。Windowsでは、VK_SEPARATORという仮想キーコードが定義されているんですが、実際にこれらのキーにはVK_ABNT_C2という仮想キーコードが割り当てられているため、これに対応しないと、KeyboardEvent.keyで、"Separator"を返せない、というバグです。

既に修正しています。KeyboardEvent.keyCodeにも対応を暇が有れば入れようと考え中です。

Bug-org 865976 Cannot build SeaMonkey on Linux since Bug 842927 (Implement DOM3 KeyboardEvent.key only for non-printable key, first) [nsGtkKeyUtils.o] Error 1 初回投稿日時: 2013年05月31日19時44分05秒
カテゴリ: Events GTK Mozilla Core Mozilla24 SeaMonkey バグ修正
固定リンク: id=2013053101
リンク元: 0件
SNS: (list)

KeyboardEvent.keyの実装時に、GTK用のコードで参照した、keysymの定数が、いくつか、SeaMonkeyのオフィシャルビルドのビルドマシンでコンパイル時にエラーになるということで、対策を入れました。

それにしても、GTK、GDKって定数に関するドキュメントが皆無なので、どの定数がどんな意味で、どのバージョンからサポートされているのか全く分からないので困ったものです。OSSの悪い見本ですな。

Bug-org 824080 selection color outside contenteditable elements becomes gray after a contenteditable element loses focus 初回投稿日時: 2013年05月31日19時51分38秒
カテゴリ: HTML Mozilla Core Mozilla24 バグ修正
固定リンク: id=2013053102
リンク元: 0件
SNS: (list)

twitterを使っている時に気付いたのですが、contenteditableな要素にフォーカスを当てた後、ドキュメントの他の部分をマウスで選択すると、選択色が非アクティブ時のままになっていました。

エディタはフォーカスを失う際に、エディタに割り当てられた、nsISelectionControllerを非アクティブ状態にするのですが、contenteditableなエディタでは、そのドキュメント全体を管理しているPresShellnsISelectionControllerの実装になっているため、ドキュメントは引き続きフォーカスを保持しているのに、誤って、状態を変更してしまっていたことが原因でした。

エディタがフォーカスを失う際に、nsISelectionControllerがエディタが固有のものか確認し、ドキュメントと共有している際には、ドキュメントのフォーカス状態も確認して、状態を設定するように修正しています。

Bug-org 396542 After clicking on readonly text input, caret doesn't blink anymore in caret mode 初回投稿日時: 2013年05月31日19時58分45秒
カテゴリ: Mozilla Core Mozilla24 バグ修正
固定リンク: id=2013053103
リンク元: 0件
SNS: (list)

キャレットブラウジング中に、readonlyな、<input type="text">要素や、<textarea>要素にフォーカスをあわせた後、他の要素をクリックしても、キャレットの点滅が再開しない、というバグです。

エディタがフォーカスを失う際に、キャレットにreadonlyかどうかの状態設定をリセットしていなかったことがこのバグの原因です。

エディタがフォーカスを失う際に独自の判断で、状態を書き換えると、似たようなバグが他にも発生する可能性があるため、キャレットブラウジングを管理しているnsFocusManagerにキャレットブラウジング用の、キャレットの初期化メソッドを追加し、エディタがフォーカスを失う際には、これを呼び出すように修正しています。

Bug-org 807893 Get rid of nsIWidget::BeginSecureKeyboardInput() and nsIWidget::EndSecureKeyboardInput() 初回投稿日時: 2013年05月31日20時06分36秒
カテゴリ: Mac Mozilla Core Mozilla24 バグ修正
固定リンク: id=2013053104
リンク元: 0件
SNS: (list)

Macでは、パスワード入力の際には、他のアプリケーションにキーイベントを監視されないように、セキュアなイベント伝達モードに切り替えないといけないのですが、これの切り替えを実装する際、フォーカスの移動時に、nsIMEStateManagerで、nsIWidget::BeginSecureKeyboardInput()nsIWidget::EndSecureKeyboardInput()を呼び出して管理するようにしていました。

しかし、Mac以外ではこのような機能そのものが必要ないこと、また、nsIWidget::SetInputContext()の改良で、nsIWidgetの実装側で、パスワードエディタがフォーカスを取得した、もしくは失ったタイミングが分かるように改善しているので、これらを利用するようにし、インターフェースからはこれらの無駄なメソッドを削除しました。

また、この修正により、Geckoのパスワードエディタがフォーカスを持った状態で他のアプリに切り替えた際に、このセキュアなイベント伝達モードが継続してしまっていたバグもあわせて修正されています。

Bug-org 855975 Separate key message handlers from nsWindow to KeyboardLayout or NativeKey 初回投稿日時: 2013年05月31日20時12分08秒
最終更新日時: 2013年05月31日20時12分33秒
カテゴリ: Mozilla Core Mozilla24 Windows バグ修正
固定リンク: id=2013053105
リンク元: 0件
SNS: (list)

Windowsのキーイベントのハンドリングを、デスクトップ版と、メトロアプリ版でコードを共有するために、nsWindowから分離して、KeyboardLayout.cppにまとめてしまおうというバグです。

この修正により、キーイベントのハンドリング処理は、widget::NativeKeyクラスのインスタンスをスタック上に生成し、メッセージにあわせたメソッドを呼ぶだけで、自動的にDOMイベントの発行まで行うようになりました。

メトロアプリ版で動かすには、手直しが必要ですが、近いうちに作業に入ろうかと考えています。