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

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

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

2013年3月27日

Bug-org 558976 IME related methods of nsIWidget should be merged
初回投稿日時: 2013年03月27日18時55分51秒
カテゴリ: Mozilla Core Mozilla22 バグ修正
SNS: (list)

GeckoのXP部分のソースコードは、nsIWidgetの様々なメソッドを使って、ネイティブのIMEにリクエストを出したり、通知したりしていますが、今までは、それぞれのためにメソッドを追加する、という形をとっていました。しかし、これでは、ただでさえ巨大化しているnsIWidgetをますます肥大化させる可能性があり、メンテナンスの際にもインターフェースの変更が必要な分、super reviewの手間がかかります。これでは、非常に効率が悪いので、今回、整理を行いました。

新たに、nsIWidget::NotifyIME(mozilla::widget::NotificationToIME aNotification)というAPIを追加しました。aNotificationで、リクエストの内容や、通知内容を指定します。

NOTIFY_IME_OF_CURSOR_POS_CHANGED

エディタに未確定文字列が無い場合に、nsIEditorIMESupport::forceCompositionEnd()が呼ばれた場合にのみ、呼び出されます。これは、従来のnsIWidget::ResetInputState()の本来の機能を置き換えます。

REQUEST_TO_COMMIT_COMPOSITION

エディタに未確定文字列がある場合に、これを強制確定する際に呼び出されます。nsIWidget::ResetInputState()のモダンな実装を置き換えます。

REQUEST_TO_CANCEL_COMPOSITION

エディタに未確定文字列がある場合に、これを破棄する際に呼び出されます。nsIWidget::CancelComposition()を置き換えます。

NOTIFY_IME_OF_FOCUS

エディタがフォーカスを得た場合に呼び出されます。nsIWidget::OnIMEFocusChange(true)を置き換えます。

NOTIFY_IME_OF_BLUR

エディタがフォーカスを失った場合に呼び出されます。nsIWidget::OnIMEFocusChange(false)を置き換えます。

NOTIFY_IME_OF_SELECTION_CHANGE

エディタ内のキャレット位置、もしくは選択範囲が変更された場合に呼び出されます。nsIWidget::OnIMESelectionChange()を置き換えます。

REQUESTというネーミングから分かるように、実際に、これらが動作するかは、ネイティブIMEのAPIに依存します。

置き換えられたメソッドは全て、削除され、すっきりとしています。

また、新しいメソッド名にあわせて、nsIWidget::OnIMETextChange(uint32_t aStart, uint32_t aOldEnd, uint32_t aNewEnd)は、nsIWidget::NotifyIMEOfTextChange(uint32_t aStart, uint32_t aOldEnd, uint32_t aNewEnd)にリネームしています。

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

bug-org 558976を含むエントリ