http://bugs.winehq.org/show_bug.cgi?id=31442
--- Comment #37 from voidcastr voidcastr@gmail.com 2012-10-07 11:48:14 CDT --- (In reply to comment #36)
The 0x281 is WM_IME_SETCONTEXT. If that's really related, WINEDEBUG=+imm may be of interest, perhaps with some additional traces added to dlls/imm32/ to see where exactly it hangs. It's also possible that the window 0x80064 belongs to a different thread that isn't processing messages for some reason, e.g. because it's waiting for something itself.
After toying atound with +imm and some custom traces I can now confirm that HIMC WINAPI ImmAssociateContext(HWND hWnd, HIMC hIMC) in dlls/imm32/imm.c hangs after the call SendMessageW(data->IMC.hWnd, WM_IME_SETCONTEXT, TRUE, ISC_SHOWUIALL); at the very end of the function.
It is called by tid 0044, so I think we got the sticking point here... literally.
Out of curiosity I just commented that line and recompiled. Result: The application does not crash anymore when trying to chat or enter the name for a new character (i.e. focussing a chatbox). I can now play and chat without having to force the game to use single threaded rendering. Same result when commenting the data->IMC.hWnd = hWnd; between the two almost identical "if (IsWindow(data->IMC.hWnd))" blocks, so the 3rd param given to SendMessageW is not the problem either. Thus I suppose something's wrong with the semantics of "data->IMC.hWnd = hWnd;" or with the actual value of hWnd.