@bsjeon I believe that, with your comctl32 patch, the composition now works as it should for the two sequences you described.
I'm glad to see the WM_IME_ENDCOMPOSITION (x11drv_ime_set_result) fix included. Thank you.
--
The following is not relevant to this MR.
Example of typing '가나' in ibus-hangul: Here is the WINEDEBUG=xim trace result after removing merge_events() from process_events().
``` 00d0:trace:xim:xic_preedit_start xic 0x7d5ebd30, hwnd 0x1005e, arg (nil) 00d0:trace:xim:xic_preedit_draw xic 0x7d5ebd30, hwnd 0x1005e, arg 0x76f118 00d0:trace:xim:xim_update_preedit_string hwnd 0x20070, offset 0, old_len 0, text L"\3131" <== 'ㄱ' 00d0:trace:xim:xic_preedit_draw xic 0x7d5ebd30, hwnd 0x1005e, arg 0x76f118 00d0:trace:xim:xim_update_preedit_string hwnd 0x20070, offset 0, old_len 1, text L"\ac00" <== '가' 00d0:trace:xim:xic_preedit_draw xic 0x7d5ebd30, hwnd 0x1005e, arg 0x76f118 00d0:trace:xim:xim_update_preedit_string hwnd 0x20070, offset 0, old_len 1, text L"\ac04" <== '간' 00d0:trace:xim:xic_preedit_draw xic 0x7d5ebd30, hwnd 0x1005e, arg 0x76f118 00d0:trace:xim:xim_update_preedit_string hwnd 0x20070, offset 0, old_len 1, text (null) 00d0:trace:xim:xic_preedit_done xic 0x7d5ebd30, hwnd 0x1005e, arg (nil) 00d0:trace:xim:xim_set_result_string hwnd 0x1005e, str "\xea\xb0\x80" <== '가' 00d0:trace:xim:xic_create xim 0x7dc5b720, hwnd 0x10068/0 00d0:trace:xim:xic_preedit_start xic 0x7d5ebd30, hwnd 0x1005e, arg (nil) 00d0:trace:xim:xic_preedit_draw xic 0x7d5ebd30, hwnd 0x1005e, arg 0x76de58 00d0:trace:xim:xim_update_preedit_string hwnd 0x20070, offset 0, old_len 0, text L"\b098" <== '나' 00d0:trace:xim:xic_create created XIC 0x7d5ee0a0 00d0:fixme:imm:ime_ui_window_proc hwnd 00020070, himc 00010064, msg WM_IME_NOTIFY, wparam IMN_SETOPENSTATUS, lparam 0 stub!탸 ```
And this is the result of the current xim trace to Wine. ``` 00d0:trace:xim:xic_preedit_start xic 0x7d5f1300, hwnd 0x1005e, arg (nil) 00d0:trace:xim:xic_preedit_draw xic 0x7d5f1300, hwnd 0x1005e, arg 0x76f088 00d0:trace:xim:xim_update_preedit_string hwnd 0x20070, offset 0, old_len 0, text L"\3131" <== 'ㄱ' 00d0:trace:xim:xic_preedit_draw xic 0x7d5f1300, hwnd 0x1005e, arg 0x76f088 00d0:trace:xim:xim_update_preedit_string hwnd 0x20070, offset 0, old_len 1, text L"\ac00" <== '가' 00d0:trace:xim:xic_preedit_draw xic 0x7d5f1300, hwnd 0x1005e, arg 0x76f088 00d0:trace:xim:xim_update_preedit_string hwnd 0x20070, offset 0, old_len 1, text L"\ac04" <== '간' 00d0:trace:xim:xic_preedit_draw xic 0x7d5f1300, hwnd 0x1005e, arg 0x76f088 00d0:trace:xim:xim_update_preedit_string hwnd 0x20070, offset 0, old_len 1, text (null) 00d0:trace:xim:xic_preedit_done xic 0x7d5f1300, hwnd 0x1005e, arg (nil) 00d0:trace:xim:xic_preedit_start xic 0x7d5f1300, hwnd 0x1005e, arg (nil) 00d0:trace:xim:xic_preedit_draw xic 0x7d5f1300, hwnd 0x1005e, arg 0x76f088 00d0:trace:xim:xim_update_preedit_string hwnd 0x20070, offset 0, old_len 0, text L"\b098" <== '나' 00d0:trace:xim:xim_set_result_string hwnd 0x1005e, str "\xea\xb0\x80" <== '가' ``` You're aware of this issue, right?