Get parent UserWidget of Widget

unless you do fancy stuff with outer object allocation, this should return the first parent canvas

best regards
Paulo Egidio
Multiverse Designer

UCanvasPanel* GetParentCanvas(UWidget* widget)
{
	UCanvasPanel* Canvas = nullptr;
	do
	{
	startloop:
		auto candidate = widget->GetParent();
		if (candidate == nullptr)
		{
			// try outer object
			UObject* outter = widget;
			while (true)
			{
				outter = outter->GetOuter();
				if (outter == nullptr)
					return nullptr;
				auto w = Cast<UWidget>(outter);
				if (w != nullptr)
				{
					widget = w;
					goto startloop;
				}
			}
		}
		else
			widget = candidate;
		Canvas = Cast<UCanvasPanel>(widget);
	} while (Canvas == nullptr);
	return Canvas;
}