The change that caused the extraneous color picker closes also caused another issue - if you have a blueprint light of any kind, place it in a level, and try to change the light color, the editor crashes.
I couldn’t find any EPS post about this issue, but it’s been reported on the public forums here: [UE5.8] Changing Light Color on a Blueprint subclass of a LightActor crashes the Editor
I would suggest you DO hotfix this for 5.8, because for people who don’t build their own editor, blueprinted lights are quite crashy at the moment.
Also, the underlying reason for the crash is that DestroyColorPicker() is not reentrant. The old code caused a stack overflow because it endlessly tried to destroy the color picker, then react to the picker being destroyed but updating some properties, and the mentioned code then tried to destroy the color picker in response to that again.
For reference, this is what the callstack looks like when that happens:
UnrealEditor-AppFramework-Win64-Debug.dll!DestroyColorPicker() Line 1602 C++
UnrealEditor-DetailCustomizations-Win64-Debug.dll!FColorStructCustomization::CreateColorPicker::__l9::<lambda_1>::operator()(UObject * InObject, FPropertyChangedEvent & InEvent) Line 329 C++
UnrealEditor-DetailCustomizations-Win64-Debug.dll!TBaseSPLambdaDelegateInstance<1,void __cdecl(UObject *,FPropertyChangedEvent &),FDefaultDelegateUserPolicy,`FColorStructCustomization::CreateColorPicker'::`9'::<lambda_1>>::ExecuteIfSafe(UObject * <Params_0>, FPropertyChangedEvent & <Params_1>) Line 376 C++
UnrealEditor-CoreUObject-Win64-Debug.dll!TMulticastDelegateBase<FDefaultDelegateUserPolicy>::Broadcast<IBaseDelegateInstance<void __cdecl(UObject *,FPropertyChangedEvent &),FDefaultDelegateUserPolicy>,UObject *,FPropertyChangedEvent &>(UObject * <Params_0>, FPropertyChangedEvent & <Params_1>) Line 306 C++
UnrealEditor-CoreUObject-Win64-Debug.dll!UObject::PostEditChangeProperty(FPropertyChangedEvent & PropertyChangedEvent) Line 558 C++
UnrealEditor-Engine-Win64-Debug.dll!AActor::PostEditChangeProperty(FPropertyChangedEvent & PropertyChangedEvent) Line 264 C++
UnrealEditor-CoreUObject-Win64-Debug.dll!UObject::PostEditChangeChainProperty(FPropertyChangedChainEvent & PropertyChangedEvent) Line 683 C++
UnrealEditor-PropertyEditor-Win64-Debug.dll!FPropertyNode::NotifyPostChange::__l14::<lambda_1>::operator()(UObject * Object) Line 3448 C++
UnrealEditor-PropertyEditor-Win64-Debug.dll!FPropertyNode::NotifyPostChange(FPropertyChangedEvent & InPropertyChangedEvent, FNotifyHook * InNotifyHook) Line 3453 C++
UnrealEditor-PropertyEditor-Win64-Debug.dll!FPropertyValueImpl::ImportText(const TArray<FObjectBaseAddress,TSizedDefaultAllocator<32>> & InObjects, const TArray<FString,TSizedDefaultAllocator<32>> & InValues, FPropertyNode * InPropertyNode, unsigned int Flags) Line 724 C++
UnrealEditor-PropertyEditor-Win64-Debug.dll!FPropertyValueImpl::ImportText(const FString & InValue, FPropertyNode * InPropertyNode, unsigned int Flags) Line 364 C++
UnrealEditor-PropertyEditor-Win64-Debug.dll!FPropertyValueImpl::SetValueAsString(const FString & InValue, unsigned int Flags) Line 1070 C++
UnrealEditor-PropertyEditor-Win64-Debug.dll!FPropertyHandleBase::SetValueFromFormattedString(const FString & InValue, unsigned int Flags) Line 2923 C++
UnrealEditor-DetailCustomizations-Win64-Debug.dll!FColorStructCustomization::OnColorPickerWindowClosed(const TSharedRef<SWindow,1> & Window) Line 442 C++
UnrealEditor-DetailCustomizations-Win64-Debug.dll!TBaseSPMethodDelegateInstance<0,FColorStructCustomization,1,void __cdecl(TSharedRef<SWindow,1> const &),FDefaultDelegateUserPolicy>::Execute(const TSharedRef<SWindow,1> & <Params_0>) Line 266 C++
UnrealEditor-AppFramework-Win64-Debug.dll!TDelegate<void __cdecl(TSharedRef<SWindow,1> const &),FDefaultDelegateUserPolicy>::Execute(const TSharedRef<SWindow,1> & <Params_0>) Line 628 C++
UnrealEditor-AppFramework-Win64-Debug.dll!SColorPicker::HandleParentWindowClosed(const TSharedRef<SWindow,1> & Window) Line 1411 C++
UnrealEditor-AppFramework-Win64-Debug.dll!TBaseSPMethodDelegateInstance<0,SColorPicker,1,void __cdecl(TSharedRef<SWindow,1> const &),FDefaultDelegateUserPolicy>::ExecuteIfSafe(const TSharedRef<SWindow,1> & <Params_0>) Line 283 C++
UnrealEditor-SlateCore-Win64-Debug.dll!TDelegate<void __cdecl(TSharedRef<SWindow,1> const &),FDefaultDelegateUserPolicy>::ExecuteIfBound(const TSharedRef<SWindow,1> & <Params_0>) Line 644 C++
UnrealEditor-SlateCore-Win64-Debug.dll!SWindow::NotifyWindowBeingDestroyed() Line 1410 C++
UnrealEditor-Slate-Win64-Debug.dll!FSlateApplication::PrivateDestroyWindow(const TSharedRef<SWindow,1> & DestroyedWindow) Line 7388 C++
UnrealEditor-Slate-Win64-Debug.dll!FSlateApplication::DestroyWindowsImmediately() Line 3286 C++
UnrealEditor-Slate-Win64-Debug.dll!FSlateApplication::RequestDestroyWindow(TSharedRef<SWindow,1> InWindowToDestroy) Line 2456 C++
UnrealEditor-SlateCore-Win64-Debug.dll!SWindow::RequestDestroyWindow() Line 1393 C++
UnrealEditor-AppFramework-Win64-Debug.dll!DestroyColorPicker() Line 1602 C++
Since that underlying issue is still there, I suggest you also add a reentrancy guard in DestroyColorPicker.
Ciao, Daniel!
[Attachment Removed]