Bug 1658 パスワード入力フィールドではIMEをオフにするべき
初回投稿日時: 2004年09月11日03時28分48秒
カテゴリ: Mozilla Core
SNS:
Tweet (list)
とりあえず、Bug 1658の修正パッチのコンセプトを解説。 IME関連のバグは基本的にこの仕組みで修正するしか無いと思う。
まず、おおまかな概略図は次のようになる。
まず、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か、その派生クラスに実装する必要がある。