Bug-org 1081993 [TSF] Candidate window position is always the top-left of browser window or just disappeared if IMM IME is active in TSF mode (~ATOK 2010, Japanist)
初回投稿日時: 2014年10月30日17時42分06秒
カテゴリ: Mozilla Core Mozilla35 Mozilla36 TSF Windows バグ修正
SNS:
Tweet (list)
TSFモードで、IMMのIME (ATOK 2010以前やJapanist、Windows 7かVistaでGoogle日本語入力)を利用していると、候補ウインドウがキャレット位置に正しく表示されず、ウインドウの左上に表示されたり、全く表示されなかったりする、というバグです。Bug-org 975383の修正によるregressionです。
IMMのIMEは、TSFモードであっても、ITextStoreACP
を利用せず、IMMのメッセージとAPIを利用して、従来通りにハンドリングしなくてはいけません。ですので、nsIWidget::NotifyIME(NOTIFY_IME_OF_COMPOSITION_UPDATE)
が呼び出された場合、ImmSetCandidateWindow()
APIでウインドウ位置をTSFモードであっても指定しておく必要があります。しかし、これまではTSFモードでは無い場合、NOTIFY_IME_OF_COMPOSITION_UPDATE
を無視していました。
では、なぜ、今までは問題なかったのか、ということになるのですが、Bug-org 975383の修正で、NS_COMPOSITION_UPDATE
の発火コードをnsIMM32Handler
から削除した際、誤ってImmSetCandidateWindow()
を呼び出していたコードを正しく削除してしまったのが、このバグが表面化した理由でした。つまり、元々バグっていたのですが、バグにより、過剰な呼び出しがあったので、それに救われていたものの、その過剰な呼び出しが削除されたということです。
今回、IMMとTSFのどちらに処理を任せるか判断しているIMEHandler
クラスの処理を見直して、TSFモードでIMM IMEが有効かどうかをきちんと確認するようにしました。これにより、TSFモードでIMM IMEを利用している場合にのみ、未確定文字列があってもKeyboardEvent
が発生するバグがありましたが、このバグも修正されています。