https://bugs.winehq.org/show_bug.cgi?id=8854
Sebastian Lackner sebastian@fds-team.de changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |sebastian@fds-team.de
--- Comment #98 from Sebastian Lackner sebastian@fds-team.de --- A fix for this issue was added to Wine Staging: https://github.com/wine-compholio/wine-staging/blob/master/patches/dinput-Ev...
For a more detailed analysis including a couple of test programs see the corresponding Wine Staging bug report: https://github.com/wine-compholio/wine-staging/issues/224
To sum up what the problem is here:
--- snip --- Michael Müller did a full analysis of this problem, which reveals that the issue is caused by the way user32 and winex11 works. Wine establishes separate X server connections for each thread, so each thread needs to call USER_Driver->pMsgWaitForMultipleObjectsEx from time to time to ensure that events are properly forwarded to the wineserver. On Windows all this isn't necessary because the kernel itself is responsible for generating window events, and there is no need to pass them from the application to the kernel.
A proper fix would mean to rewrite winex11 to always handle X11 events asynchronously, and without explicit need for a message loop. Since such a rewrite is rather unlikely and will not happen during the near future, adding a workaround till a better solution is found. This workaround will have no disadvantage, except that this isn't a complete fix. Please note that not only hooks are affected by this issue, also *RawInput* functions show the same issue - which is the reason why native dinput will still not work (already tested). --- snip ---
Please note that since its not a complete fix, it will most likely be impossible to get something like that upstream.