Bug-org 724471 [IMM] two sets of composition events are fired for a composition of Korean IME
初回投稿日時: 2012年02月10日16時32分51秒
カテゴリ: Mozilla Core Mozilla13 バグ修正
SNS:
Tweet (list)
古いIMEのコードの整理第二弾も兼ねたバグです。かなり古いバグでハングル文字用のIMEの挙動のために特殊なコードが入っていましたが、そのコードが原因で、ハングルを一文字確定するために2回、compositionstart
、compositionupdate
、compositionend
がセットで発生していました。
ハングルのIMEは一文字、ハングル文字が完成するたびに確定されていく感じなのですが、スペースキーや、Enterキーを押した時に、編集中の文字はそのまま確定し、そのままスペースや改行が入力されるようになっています。
問題のハックは、スペースキーを押したときのハングルIMEの変な挙動に対応するものでした。ハングルIMEは、スペースキーを押した時に次のようにメッセージを送信してきます。
WM_KEYDOWN
(VK_PROCESSKEY
)WM_IME_ENDCOMPOSITION
WM_IME_COMPOSITION
(GCS_RESULTSTR
)WM_KEYDOWN
(VK_SPACE
)
普通は、WM_IME_ENDCOMPOSITION
は全てが終わってから送信されるべきなのですが、WM_IME_COMPOSITION
で未確定文字列を確定するイベントが後からやってきます。
このため、意図しないWM_IME_ENDCOMPOSITION
が来た場合には空の文字列で確定し、意図しないWM_IME_COMPOSITION
が来たら、それをWM_IME_STARTCOMPOSITION
を送信し忘れていると見なして処理する、という形になっていました。
今回の修正で、WM_IME_ENDCOMPOSITION
を受け取った時に、WM_IME_COMPOSITION
が確認できて、なおかつそれが確定しようとしているのであれば、WM_IME_ENDCOMPOSITION
では何も処理しないようにしています。