Hi!
This is another attempt at upstreaming my rawinput patches.
I think there's a safer route, by first implementing the wineserver and dinput8 parts, while still relying on the current winex11 code. As long as a Wine window has input focus, the rawinput messages can be dispatch correctly to the listening processes.
This series implements the missing rawinput support in wineserver, as well as some flag support that dinput8 implementation will then use.
Then it should be possible to implement dinput8 on top of rawinput API, and get rid of the low-level hooks there, which is the correct way to do, and which should improve performance.
The tricky part is about listening to xinput2 rawevent globally, which will solve the spurious mouse movements, but it will require first to sort out or workaround some focus issues, so that events are only dispatched when a Wine window has input focus. It can probably still live in staging until an good solution is found.
Cheers,
Rémi Bernon (8): user32/tests: Add basic rawinput message tests. user32/tests: Add inter-thread rawinput message tests. user32/tests: Add inter-process rawinput message tests. server: Implement rawinput cross-process message dispatch. server: Split cursor position update to update_desktop_cursor_pos. server: Split cursor state update to update_desktop_mouse_state. server: Implement RegisterRawInputDevices RIDEV_NOLEGACY flag. server: Implement RegisterRawInputDevices RIDEV_INPUTSINK flag.
dlls/user32/rawinput.c | 9 +- dlls/user32/tests/input.c | 325 +++++++++++++++++++++++++++++++++++++- server/queue.c | 200 +++++++++++++++++------ 3 files changed, 485 insertions(+), 49 deletions(-)