Summary
On native Wayland, the Unreal Editor receives SDL desktop-global mouse coordinates when the editor window is on a monitor with a non-zero virtual origin. Slate hit testing uses window-local geometry, so mouse clicks do not hover or activate any editor widgets.
What Type of Bug are you experiencing?
Editor
Steps to Reproduce
- Run Unreal Editor 5.8.1 on Linux using the native Wayland SDL3 backend.
- Configure a monitor with a non-zero virtual desktop origin; reproduced with a 3840x2160 Sunshine output at (9999,9999).
- Put the editor window on that monitor.
- Move the physical mouse over an editor control such as File and click.
- Observe that the control neither hovers nor activates, despite the window receiving the mouse event.
Expected Result
Slate should convert the platform mouse position into the same coordinate space used by the target window hit-test grid. Hover and click should activate the control under the physical pointer regardless of the monitor virtual origin.
Observed Result
The SDL event reaches FLinuxApplication, but Slate receives the desktop-global position with the monitor origin still included. In the reproduction, a physical File click was processed near (10077,10013), while the File button hit-test geometry was near (77,11.5). The resulting widget path was empty. A direct Slate click injected at (77,11.5) correctly activated SButton.
Affects Versions
5.8
Platform(s)
Linux
Additional Notes
Relevant source path in the installed 5.8.1 source: FLinuxApplication::ProcessDeferredMessage invalidates FLinuxCursor on SDL_EVENT_MOUSE_MOTION. The editor-only branch does not repopulate the cursor cache from motionEvent.x/y. FLinuxCursor::GetPosition then calls SDL_GetGlobalMouseState, and OnMouseDown forwards the event while Slate queries that global position. Files: Engine/Source/Runtime/ApplicationCore/Private/Linux/LinuxApplication.cpp and Engine/Source/Runtime/ApplicationCore/Private/Linux/LinuxCursor.cpp. The failure is a consistent coordinate-space offset, not a focus or compositor problem: physical input reaches the Unreal Linux platform layer and Slate, but the hit-test route is empty. The offset exactly matches the monitor virtual origin.