Hi,
Yeah, your third point there is in line with what I’ve seen reported in the past. It tends to come up every few months and we haven’t locked down a solid repro case or cause yet, so apologies if there’s a lot of speculation and not much in ways of a concrete solution.
Were you able to try setting the default mouse cursor to None in the player controller? It’s a bit unclear if the missing FingerUp events are caused specifically by viewport capture or by any capture at all, though I suspect that workaround has primarily worked in cases where there wasn’t much/any UI present so maybe that’s why it was sufficient. If any capture whatsoever is causing the event to leak, that’s a bit trickier to handle without engine changes. I see two points where we call into SDL to change the capture target- FLinuxApplication::UpdateMouseCaptureWindow and UngrabAllInputImpl. If you’re able to temporarily make engine changes, it would be interesting to comment out all of those SDL_CaptureMouse calls and see if that fixes things in your build. It would certainly mess some things up in the Linux Editor (if you’re using that), but it’s a good datapoint nonetheless.
Another potential factor here, we skip capturing the mouse if the cursor is hidden (but we still release it) in FLinuxApplication::UpdateMouseCaptureWindow:
bool bShouldGrab = (IS_PROGRAM != 0 || WITH_ENGINE != 0 || GIsEditor) && !LinuxCursor->IsHidden();
This might explain why the workaround of setting the mouse cursor to None was effective, so I’d definitely be interested in hearing if that does anything on your end. If its still misbehaving but you’re able to temporarily make some engine changes, adding logging next to the SDL_ShowCursor calls could help us figure out what leads up to the failure state where an event isn’t sent.
Best,
Cody