`FRuntimeFloatCurve` inline curve editor in Details panel is functionally uneditable - dragging keys causes per-frame Details refresh that steals focus away from Curve editor

When a `FRuntimeFloatCurve` property is displayed inline in the Details panel via `FCurveStructCustomization`, attempting to drag a curve key or adjust the tangents is not possible. The curve editor appears to accept the initial click, but each micro-adjustment immediately refreshes the whole Details panel and the curve editor seems to lose focus, making the edit functionally impossible.

I narrowed down the root cause to `FCurveStructCustomization::OnCurveChanged()` (`Engine/Source/Editor/DetailCustomizations/Private/CurveStructCustomization.cpp`). This callback fires on every frame during a key drag and calls:

void FCurveStructCustomization::OnCurveChanged(const TArray<FRichCurveEditInfo>& ChangedCurveEditInfos)
{
    StructPropertyHandle->NotifyPostChange(EPropertyChangeType::Unspecified);
}

`EPropertyChangeType::Unspecified` seems to trigger a full Details panel refresh each frame. This refresh steals keyboard/mouse focus away from the curve editor’s active drag operation. The result is that the drag is cancelled on the very next frame, making it impossible to move keys, add keys, or otherwise edit the curve interactively.

The expected behavior is that dragging curve keys in the inline Details panel curve editor should work smoothly, with the Details panel deferring its full refresh until the drag is complete.

Suggested fix (which I have made as an engine modification on our project):

Change `EPropertyChangeType::Unspecified` to `EPropertyChangeType::Interactive` in `FCurveStructCustomization::OnCurveChanged`. Interactive signals to the property system that an ongoing edit is in progress and suppresses the full Details panel refresh.

void FCurveStructCustomization::OnCurveChanged(const TArray<FRichCurveEditInfo>& ChangedCurveEditInfos)
{
    StructPropertyHandle->NotifyPostChange(EPropertyChangeType::Interactive);
}

[Attachment Removed]

Steps to Reproduce
(see repro video)

  • Create a new Actor Blueprint in the Content folder
  • Add a property of type `FRuntimeFloatCurve`
  • In the Details panel, locate the `FRuntimeFloatCurve` property and open the inline curve editor.
  • Click on the curve to add a key, or click an existing key.
  • Attempt to drag the key to a new position.

Observed: The key snaps back immediately; the drag cannot be completed. The curve is functionally uneditable via the inline Details panel widget.

Expected: The key follows the mouse during the drag, and the curve updates smoothly. The Details panel refreshes only after the drag is released.

Affects: Any `FRuntimeFloatCurve` property edited inline in the Details panel. The pop-out curve editor (double-click to open) also seem to be affected.

Engine version: UE 5.7.4 (confirmed present in current main)

[Attachment Removed]

Hey!

Thanks for sharing that, it looks like it probably slipped through the cracks for a while since it only refreshes the panel in certain contexts. I’m seeing it work properly in most details panels (so it’s not explicitly refreshing it), but editing the default in the BP editor does reinstance everything which means the whole underlying data structure is being rebuilt. I don’t see any issues with setting this to interactive, I’ll see if I can get that checked in for a future release.

[Attachment Removed]

Thanks, Cody!

Hopefully we can get this into the mainline so that we can remove our engine mod.

[Attachment Removed]

This should now be checked in at CL#54980055 if you want to grab it. Thanks again!

[Attachment Removed]