SlateUser.cpp FSlateUser::NotifyPointerMoveComplete() contains an if (ensure(Cursor)){} check which halts execution. This seems excessive to me as if(IsValid(Cursor)){ would do the same without the ensure breaking execution when using a widget interaction component and virtual user.
It’s the same defect as detailed in this thread (3D Widget Interaction Drag & Drop Freezes up the Game) However, the proposed solution there won’t quite work for us as we need the ability to freely drag our custom slate components around within their owning 3D widget parents.
Without branching and modifying the engine, and because we use a custom slate base for all our interactive UI components. I’ve though about manually calculating the pointerDelta each frame while onPressed over a draggable component. Then using that delta to change the padding values (owning panel type dependent) and dirty the layout. This effectively bypasses UE’s ‘Drag and Drop’ paradigm for a simpler solution but seems excessive.
I’d love some sage advice as i find myself fighting this engine at almost every turn and it’s wearing me out.