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_ENDCOMPOSITIONWM_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では何も処理しないようにしています。