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

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

もずはっく日記(2012年11月)

2012年11月14日

Bug-org 805767 nsIMEManager::CreateTextStateManager() should use nsIWidget::GetIMEUpdatePreference() rather than the result of OnIMEFocusChange()
初回投稿日時: 2012年11月14日14時08分25秒
カテゴリ: Mozilla Core Mozilla19 バグ修正
SNS: (list)

nsIMEStateManagerと、nsTextStateManagerの再設計、最後のバグです。nsTextStateManagerがエディタ内での選択位置の変化や、文字列の変化を通知するのは非常にコスト高なので、各プラットフォームのwidgetが望んだ場合にのみ実行するようになっていました。ただ、その通知方法が、非常にハッキーで、nsIWidget::OnIMEFocusChange(true)NS_OKを返すか否か、という、widget側の開発者からすると訳の分からないことになっていました。このバグはこれを修正しています。

e10sやモバイル用でのプロセス間通信用のPuppetWidgetがどのように振る舞うべきかを確認するために、nsIWidget::GetIMEUpdatePreference()というAPIが既にあり、この返す値が、nsIWidget::OnIMEFocusChange(true)の戻り値の代わりになることが分かっていました。

nsTextStateManagerはコンストラクタで、nsIWidget::OnIMEFocusChange(true)の戻り値を確認しないようにし、代わりに、nsIWidget::GetIMEUpdatePreference()になりました。これにより、widget側では、実装しているにも関わらず、nsIWidget::OnIMEFocusChange(true)NS_ERROR_NOT_IMPLEMENTEDを返さなくて済むようになっています。

本当であればnsIWidget::OnIMEFocusChange()の戻り値をvoidにしたかったのですが、そのためにインターフェースを変更するのも良くありませんので、そのままにしてあります。まだ承認されるかは分かりませんが、nsIWidgetのIME関連APIの再構成の祭に削除する可能性が高いAPIですし。

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

bug-org 805767を含むエントリ