この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、
断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。
Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではない ことに注意してください。
現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。
順次、修正していく予定ですのでしばらくお待ちください。
もずはっく日記(2013年11月)
2013年11月29日
WebKit/Blinkに実装競争で負けちゃいましたが、Geckoにもようやく、KeyboardEvent.repeat
を実装しました。
基本的には、各プラットフォームのネイティブキーイベントのリピート情報を参照して値を決定していますが、Xのキーイベントにはこの情報がないため、GDKにも情報はありません。そのため、最後に押されたオートリピート可能なキーのキーコードを記憶しておいて、キーイベントが連続して発生した場合には、true
をセットするようにし、キーコードはフォーカスを失う際に捨てるようにしています。このため、タイトルバーをクリックする等、ネイティブのフォーカス移動イベントが発生する操作を行った場合にも、リピートが途切れるところが、他のプラットフォームとは異なっています。まあ、問題になることはないとは思いますが。
Macでのみ、ブックマークツールバーのフォルダを開いた時に出てくるメニュー(ブックマークアイテム)の上で、コンテキストメニューを出そうとしても、表示されないというバグです。バグ番号から分かるように、かなり古いバグです。
元々、Firefox 2で、Placesを実装中に、Macでのみ、サブメニュー内でコンテストメニューを表示しても、期待通りに動かないので、とりあえず無効化しておこう、という理由でMacでのみ、コンテキストメニューの紐付けが解除されていました。
その後、Bug-org 503639 によると、不意に、コンテキストメニューが表示されるようになっていたようですが、『Mac OSにとって、自然なUIではない』という理由で、深い検証を行わずに、再度、コンテキストメニューが表示されないよう、Macでのみ、既にメニューが開かれている場合には、コンテキストメニューは表示しないように修正されていました。
今回、修正するにあたり、ChromeやSafariで動作を確認してみたところ、Chromeではコンテキストメニューが使え、Safariでは使えませんでした。そこで、
修正は容易である
Mac OS Xのネイティブアプリにはない挙動だが、Chromeは取り入れている
そもそも他のプラットフォームでも、ネイティブアプリにはない挙動
といった理由から、修正を行いました。
Bug-org 501496 のregressionです。プリントプレビューを表示している際に、プレビューされているコンテンツ部分をクリックした後に、UIのアクセスキーが利用できない、というバグです。
コンテンツ部分は、プリントプレビューモードに入る際に、DocShellにキャプチャフェイズのイベントリスナを登録し、コンテンツに処理される前に、イベントを殺すことで、プリントプレビュー内のコンテンツのスクリプト等が動くことを阻止しています。
Bug-org 501496の修正により、この、リスナによってkeydown
イベントのpreventDefault()
が呼び出されているために、keypress
イベントが発生しなくなり、nsEventStateManager
がアクセスキーを処理することができなくなっているのが原因でした。
今回の修正により、keydown
イベントのみ、デフォルトイベントグループ、システムイベントグループの両方で、リスナを登録し、keypress
イベントを殺してしまわないよう、なおかつ、他のコンテンツがイベントを処理できないように、stopPropagation()
のみを呼ぶようにして解決しています。
Bug-org 906072 で、Maemo用のコードが、widget/gtk
配下から一掃する際に、nsGtkIMModule.cpp
内で、誤って、#ifndef
内が消されたり、逆に#ifdef
の条件のみが消されたりすることで、GTK版では、Firefox 26以降、パスワードエディタでもIMEが使えるようになっていました。
ギリギリ、ベータ版の間にこのバグが発見されたので、部分的にバックアウトすることで、事なきをえましたが、これはFirefoxコミュニティの、非常に根深い問題を表しています。こんなレベルのバグが、Nightly、Aurora、Beta合わせて、2ヵ月間、日本のテスタの手で発見されていなかったことに、落胆するとともに、力不足を痛感させられました。
2013年11月30日
widget/
配下のイベントクラスのヘッダファイルが、様々なヘッダファイルにインクルードされているために、ここの変更時にフルビルドに近い、リビルドが必要になるので、できる限り、ヘッダではインクルードしないように修正しようというバグです。
先月のチェックインが最後のチェックインになりましたが、ようやく、検証が終わって、バグの修正完了となりました。
この修正により、技術的に不可能だった修正一件を除けば、現在、イベントクラスのヘッダファイルをインクルードしているヘッダファイルは、ビルド時間にさほど影響のないものだけに限定されています。
サイドバー
日記内のナビゲーション
Twitter