@h0tc0d3 Thanks, I'll have a better look.
@gofman The missing rawinput messages comes from the difference in (upstream) Wine where X11 input is only checked when the application checks for messages. This means that rawinput messages are only queued when PeekMessage is called, and are then mostly immediately processed by the message loop and leave the rawinput buffer empty. On Windows (and in Proton), input comes from the background and will fill the rawinput buffer during the Sleep.