Changes in color picker tool in some editor windows are not reflected until the color is confirmed

On vanilla UE 5.2.1 and 5.3, the changing color preview on the Color picker tool would always update the preview of related elements in various editors, like Material editor, Niagara editor, Blueprints viewport, etc.

Starting from vanilla UE 5.4.4, the Color picker no longer always behaves like that. In the case of the Niagara Particle System editor, changing the color of the particle inside the Details view node for that emitter does update the emitters’ color, but binding that color to a user parameter and then doing the same with the color picker for the user param does not result in the same behavior.

As such artists have to confirm the color to see the change reflected which requires much more clicking, especially when they are checking various colors for their Materials or NPS or others.

If that change was intended due to various reasons, could you please provide CLs where it was changed, so we could switch back to old behaviour?

Steps to Reproduce

  1. Create a Niagara Particle System based on BlowingParticles Niagara Emitter
  2. Create User Param with Linear Color
  3. Select the BlowingParticles emitter node in Niagara system editor
  4. Open Details view and find Point Attribute section with Color property
  5. Click on the dropdown icon and General->Link Inputs->User and select User param created by You
  6. Open the Color picker tool for your User Parameter
  7. Change color on the color picker without clicking OK
  8. Check the regenerated particles’ color

Result: Regenerated particles do not change color to the one previewed on the color picket.

Expected result: The color picker behaves like in 5.2.1 / 5.3 where changing the color preview on the color picker would also update the color of the particles and other elements.

Hello [mention removed]​,

Thank you for the detailed repro steps. I’ve been able to reproduce this issue on my end.

In UE 5.4, the SNiagaraColorParameterEditor was refactored to use a new modular SNiagaraColorEditor widget (see NiagaraColorTypeEditorUtilities.cpp), which changed how color preview interactions are handled. Here is the relevant change.

In older versions, the class used direct SColorPickerArgs bindings such as OnInteractivePickBegin and OnInteractivePickEnd to drive interactive updates, enabling the color picker preview to take effect. In the new setup, these hooks are no longer being used in the SNiagaraColorEditor implementation.

I found a workaround that restores the expected behavior. You would need to modify both the SNiagaraColorEditor .h and .cpp file.

Here’s the modification:

`// SNiagaraColorEditor.h:

// Force the color update during interaction with the color picker
void OnColorPickerInteraction();

// SNiagaraColorEditor.cpp:

FReply SNiagaraColorEditor::OnColorBlockMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
{
if (MouseEvent.GetEffectingButton() != EKeys::LeftMouseButton)
{
return FReply::Unhandled();
}

OnBeginEditingDelegate.ExecuteIfBound();

FColorPickerArgs PickerArgs;
{
PickerArgs.bUseAlpha = bShowAlpha;
PickerArgs.bOnlyRefreshOnMouseUp = false;
PickerArgs.bOnlyRefreshOnOk = false;
PickerArgs.DisplayGamma = TAttribute::Create(TAttribute::FGetter::CreateUObject(GEngine, &UEngine::GetDisplayGamma));
PickerArgs.OnColorCommitted = FOnLinearColorValueChanged::CreateSP(this, &SNiagaraColorEditor::ColorPickerColorCommitted);
PickerArgs.OnColorPickerCancelled = FOnColorPickerCancelled::CreateSP(this, &SNiagaraColorEditor::OnColorPickerCancelled);
PickerArgs.OnColorPickerWindowClosed = FOnWindowClosed::CreateSP(this, &SNiagaraColorEditor::OnColorPickerClosed);

// Workaround to force color pick preview
PickerArgs.OnInteractivePickEnd = FSimpleDelegate::CreateSP(this, &SNiagaraColorEditor::OnColorPickerInteraction);

PickerArgs.InitialColor = Color.Get(FLinearColor::White);
PickerArgs.ParentWidget = ColorBlock;
FWidgetPath ParentWidgetPath;
if (FSlateApplication::Get().FindPathToWidget(ColorBlock.ToSharedRef(), ParentWidgetPath))
{
PickerArgs.bOpenAsMenu = FSlateApplication::Get().FindMenuInWidgetPath(ParentWidgetPath).IsValid();
}
}

OpenColorPicker(PickerArgs);
OnColorPickerOpenedDelegate.ExecuteIfBound();
return FReply::Handled();
}

void SNiagaraColorEditor::OnColorPickerInteraction()
{
OnEndEditingDelegate.ExecuteIfBound();
}`With the delegate bound, the color picker preview will now take effect immediately whenever you interact with it.

Please let me know if this workaround helps. I’ll follow up with the Epic team to confirm whether this behavior change was intentional or a regression introduced during the widget refactor.

Best,

Francisco

Hello Francisco

Checked the workaround on our repository and it solved the problem for us. Thank you very much for the help!

Hello [mention removed]​,

Apologies for the delay, just wanted to let you know that the bug has now been officially registered in the Unreal Engine Issue Tracker. You can find it here: https://issues.unrealengine.com/issue/UE-273507.

Best,

Francisco

Hello [mention removed]​,

Glad to hear the workaround helped! I’ve reported this issue to Epic engine team, and a public bug report will be available on the issue tracker soon. I’ll follow up with the link as soon as it’s live.

Best,

Francisco