https://bugs.winehq.org/show_bug.cgi?id=35361
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |focht@gmx.net Summary|Multiple Steam games crash |Multiple Steam games crash |on keypress with in-game |on keypress with in-game |community overlay enabled |community overlay enabled | |(cross-process/thread IME | |must be prohibited)
--- Comment #33 from Anastasius Focht focht@gmx.net --- Hello folks,
I think MSDN is pretty clear about these types of IME limitations:
http://msdn.microsoft.com/en-us/library/dd317789%28VS.85%29.aspx
--- quote --- Developing IME-Aware Multiple-thread Applications
The IMM includes thread identification checking that determines if a calling thread is the creator of a specified input method context handle (HIMC type) or window handle (HWND type). If the thread is not the creator of the handle, the called IMM function fails and a subsequent call to GetLastError returns ERROR_INVALID_ACCESS.
Note: The current IMM architecture does not provide a synchronization facility for access to IMM handles.
To use thread identification checking, your applications must adhere to the following guidelines:
* A thread should not access the input context created by another thread. * A thread should not associate an input context with a window created by another thread, and vice versa. --- quote ---
This of course implies that cross-process IME is prohibited by design. Well, at least not without resorting to more or less intrusive process/dll injection techniques.
Basically you need to check for violations of the requirements in IME APIs and fail subsequently:
ImmAssociateContext ImmGetContext ...
With that part fixed, the Steam in-game community overlay works (already tested).
Regards