Summary
When starting right-click drag scrolling in a ListView widget,
the visible cursor jumps a fixed distance toward the upper-left.
The issue occurs in both PIE and packaged Windows builds in our project.
ScrollBox-based scrolling areas do not exhibit the same visible offset.
We identified a difference between the software cursor positioning
expressions in STableViewBase::OnPaint and SScrollBox::OnPaint.
A project-side workaround that makes the ListView cursor positioning
match SScrollBox eliminates the visible jump.
What Type of Bug are you experiencing?
UI / Tools
Steps to Reproduce
- Create a new project in Unreal Engine.
- Create a Widget Blueprint containing a native UMG ListView.
- Assign an entry widget and populate the list with enough items
to make it scrollable. - Add the widget to the viewport and run PIE.
- Hold the right mouse button over the list and move the mouse
to begin scrolling. - Observe the software grab cursor jumping toward the upper-left.
Expected Result
Cursor stays the pressed position when begin drag.
Observed Result
Cursor jumps toward the upper-left.
In the following image:
Left: ScrollBox
Right: ListView
Drag with right mouse button
Affects Versions
5.7
Platform(s)
Windows
Upload an image

Additional Notes
In STableViewBase::OnPaint, the software cursor position uses:
SoftwareCursorPosition - (CursorSize / .5f)
Following the implementation in SScrollBox::OnPaint, changing
“/ .5f” to “* .5f” resolves the visible cursor jump in our local test:
SoftwareCursorPosition - (CursorSize * .5f)