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

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

もずはっく日記(2004年9月)

2004年9月11日

Bug 1658 パスワード入力フィールドではIMEをオフにするべき
初回投稿日時: 2004年09月11日03時28分48秒
カテゴリ: Mozilla Core
SNS: (list)

とりあえず、Bug 1658の修正パッチのコンセプトを解説。 IME関連のバグは基本的にこの仕組みで修正するしか無いと思う。

まず、おおまかな概略図は次のようになる。

Bug 1658のパッチの概略図

まず、nsWindowクラスがnsTextEditor*Listnerクラスに対してクロスプラットフォームなイベントを生成する。 この部分は大抵、既存のルートがあるはず。 通常、ここからイベントに応じて処理を行う訳だが、今回はnsEditor内で処理を行う必要があったので、nsIEditorIMESupportインターフェースにメソッドを追加して、nsEditor内でイベントを拾えるようにしている。 今回追加したのは、フォーカス取得と、フォーカス喪失イベントの二つである。

これらのイベント内で今度はIMEを操作する必要がある。 しかし、nsEditorはクロスプラットフォームなソースコードのため、当然、OSのAPIを直接呼び出せない。 そこで、OSのAPIを呼び出せるクラスで、nsIKBStateControlクラスをスーパークラスに持つクラス、Windowsの場合はnsWindow、他のOSの場合はnsWidget等のクラスに共通のAPIを追加して、このAPI内で各OSごとに処理を行うことになる。

今回、このバグはWindowsでしか修正は終わらない。 しかし、クロスプラットフォーム部分の修正は終わるので、他のOSではこのAPIを実装するだけでバグ修正が行える。 ちなみに、APIの実装だけで済むのはmac/、cocoa/、photon/、gtk/のみ。 gtk2/やos2/、beos/等はnsIKBStateControlクラスそのものをnsWidgetか、その派生クラスに実装する必要がある。

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

bug 1658を含むエントリ

Bug 1658 パスワード入力フィールドではIMEをオフにするべき #2