Summary
In UE 5.8, when the game runs in windowed mode with the mouse captured and hidden (e.g., the First Person template), the invisible cursor can reach the outermost pixel of the window. Clicking there is handled by the OS as a click on the window’s resize border: the cursor briefly appears, game input stops responding, and the window can even be resized by dragging. This does not happen in 5.7.
What Type of Bug are you experiencing?
UI / Tools
Steps to Reproduce
- Create a new project from the First Person template in UE 5.8.
- Package the project (Development, Win64).
- Launch the packaged build in windowed mode (e.g.,
-windowed -ResX=1280 -ResY=720). - Keep turning the camera to the right until the hidden cursor reaches the right edge of the window.
- Click the left mouse button.
Expected Result
The click fires the weapon, and the cursor stays locked inside the viewport (as in 5.7).
Observed Result
The cursor briefly appears, input stops working, and dragging resizes the window.
Affects Versions
5.8
Platform(s)
Windows
Video
Additional Notes
Possibly related change
This may be related to CL 51272765 (“[Slate] Fix cursor-locking and zone determination edge cases”, UE-365722). As far as I can tell, this change removed ClipRectAdjustment from FSlateUser::LockCursorInternal. In 5.7, the clip rect was shrunk by 1 pixel for windows that are not borderless game windows, which may have been preventing the cursor from reaching the window’s resize border.
Environment
- Unreal Engine: 5.8 , compared with 5.7
- OS: Windows11
Update
I bisected this to CL 51272765 (UE-365722). The commit right before it does not reproduce the issue. The problem is still present in ue5-main.
I submitted a fix as a pull request:
[Slate] Fix cursor lock rect reaching the window resize border.- #15260
The fix restores the 1px inset (ClipRectAdjustment) that was removed in that change, applied only to windows with an OS border. Borderless windows are unaffected, and the rounding fix from UE-365722 is kept.
If you need a workaround in the meantime, you can apply the same change locally in FSlateUser::LockCursorInternal (SlateUser.cpp).