Rémi Bernon (@rbernon) commented about dlls/winemac.drv/keyboard.c:
TRACE("flags 0x%08x keyc 0x%04x\n", flags, keyc);
- if (!thread_data->ime_done_event)
 - {
 NTSTATUS status;status = NtCreateEvent(&thread_data->ime_done_event, EVENT_ALL_ACCESS, NULL,SynchronizationEvent, FALSE);if (status != STATUS_SUCCESS) ERR("NtCreateEvent call failed.\n");- }
 - macdrv_ime_process_key(keyc, flags, repeat, himc, &done, thread_data->ime_done_event);
 - NtUserMsgWaitForMultipleObjectsEx(1, &thread_data->ime_done_event, INFINITE, 0, 0);
 - return done > 0;
 
- ret = (UINT)macdrv_ime_process_key(keyc, flags, repeat, himc);
 - macdrv_ProcessEvents(QS_POSTMESSAGE | QS_SENDMESSAGE);
 
I don't think it's good to call `macdrv_ProcessEvents` directly. Why is it still necessary if the key processing is synchronous?