So what i ended up doing:
.h
#if WITH_EDITOR
UFUNCTION()
void OnSelectionChanged(UObject* InObject);
#endif
protected:
#if WITH_EDITOR
FDelegateHandle OnSelectionChangedDelegateHandle;
virtual void PostActorCreated() override;
virtual void BeginDestroy() override;
bool bWasSelected = false;
#endif
.cpp
#if WITH_EDITOR
void AMyActor::PostActorCreated()
{
Super::PostActorCreated();
//Bind To SelectionChangedEvent if delegate is not yet bound
if (!OnSelectionChangedDelegateHandle.IsValid())
{
OnSelectionChangedDelegateHandle = USelection::SelectionChangedEvent.AddUObject(this, &AMyActor::OnSelectionChanged);
}
}
void AMyActor::BeginDestroy()
{
// If Delegate is bound remove it
if (OnSelectionChangedDelegateHandle.IsValid())
{
USelection::SelectionChangedEvent.Remove(OnSelectionChangedDelegateHandle);
OnSelectionChangedDelegateHandle.Reset();
}
Super::BeginDestroy();
}
void AMyActor::OnSelectionChanged(UObject* InObject)
{
// Check if Actor is selected and store selection
if (IsSelected())
{
bWasSelected = true;
}
// If the actor is not selected but was selected before
else if (bWasSelected)
{
//UE_LOG(OrbitCamera, Warning, TEXT("DE-SELECTED"));
bWasSelected = false;
//Do your deselection logic here
}
}
#endif