この日記は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
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日
MacのJISキーボードや、ブラジルのキーボードは、テンキーに、千単位での区切り文字(日本語ならカンマ)を入力するキーがあります。Windowsでは、VK_SEPARATOR
という仮想キーコードが定義されているんですが、実際にこれらのキーにはVK_ABNT_C2
という仮想キーコードが割り当てられているため、これに対応しないと、KeyboardEvent.key
で、"Separator"
を返せない、というバグです。
既に修正しています。KeyboardEvent.keyCode
にも対応を暇が有れば入れようと考え中です。
KeyboardEvent.key
の実装時に、GTK用のコードで参照した、keysymの定数が、いくつか、SeaMonkeyのオフィシャルビルドのビルドマシンでコンパイル時にエラーになるということで、対策を入れました。
それにしても、GTK、GDKって定数に関するドキュメントが皆無なので、どの定数がどんな意味で、どのバージョンからサポートされているのか全く分からないので困ったものです。OSSの悪い見本ですな。
twitterを使っている時に気付いたのですが、contenteditable
な要素にフォーカスを当てた後、ドキュメントの他の部分をマウスで選択すると、選択色が非アクティブ時のままになっていました。
エディタはフォーカスを失う際に、エディタに割り当てられた、nsISelectionController
を非アクティブ状態にするのですが、contenteditable
なエディタでは、そのドキュメント全体を管理しているPresShell
がnsISelectionController
の実装になっているため、ドキュメントは引き続きフォーカスを保持しているのに、誤って、状態を変更してしまっていたことが原因でした。
エディタがフォーカスを失う際に、nsISelectionController
がエディタが固有のものか確認し、ドキュメントと共有している際には、ドキュメントのフォーカス状態も確認して、状態を設定するように修正しています。
キャレットブラウジング中に、readonly
な、<input type="text">
要素や、<textarea>
要素にフォーカスをあわせた後、他の要素をクリックしても、キャレットの点滅が再開しない、というバグです。
エディタがフォーカスを失う際に、キャレットにreadonly
かどうかの状態設定をリセットしていなかったことがこのバグの原因です。
エディタがフォーカスを失う際に独自の判断で、状態を書き換えると、似たようなバグが他にも発生する可能性があるため、キャレットブラウジングを管理しているnsFocusManager
にキャレットブラウジング用の、キャレットの初期化メソッドを追加し、エディタがフォーカスを失う際には、これを呼び出すように修正しています。
Macでは、パスワード入力の際には、他のアプリケーションにキーイベントを監視されないように、セキュアなイベント伝達モードに切り替えないといけないのですが、これの切り替えを実装する際、フォーカスの移動時に、nsIMEStateManager
で、nsIWidget::BeginSecureKeyboardInput()
やnsIWidget::EndSecureKeyboardInput()
を呼び出して管理するようにしていました。
しかし、Mac以外ではこのような機能そのものが必要ないこと、また、nsIWidget::SetInputContext()
の改良で、nsIWidget
の実装側で、パスワードエディタがフォーカスを取得した、もしくは失ったタイミングが分かるように改善しているので、これらを利用するようにし、インターフェースからはこれらの無駄なメソッドを削除しました。
また、この修正により、Geckoのパスワードエディタがフォーカスを持った状態で他のアプリに切り替えた際に、このセキュアなイベント伝達モードが継続してしまっていたバグもあわせて修正されています。
Windowsのキーイベントのハンドリングを、デスクトップ版と、メトロアプリ版でコードを共有するために、nsWindow
から分離して、KeyboardLayout.cpp
にまとめてしまおうというバグです。
この修正により、キーイベントのハンドリング処理は、widget::NativeKey
クラスのインスタンスをスタック上に生成し、メッセージにあわせたメソッドを呼ぶだけで、自動的にDOMイベントの発行まで行うようになりました。
メトロアプリ版で動かすには、手直しが必要ですが、近いうちに作業に入ろうかと考えています。
サイドバー
日記内のナビゲーション
Twitter