From 7f1d0e9c0e3d19953ad2dd719de4a44d69f6720a Mon Sep 17 00:00:00 2001 From: Steve Streeting Date: Tue, 25 Jun 2024 15:03:28 +0100 Subject: [PATCH] UFocusableUserWidget::NativeOnFocusReceived - call SetFocusProperly if not otherwise handled --- .../Private/StevesUI/FocusableUserWidget.cpp | 13 +++++++++++++ .../Public/StevesUI/FocusableUserWidget.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/Source/StevesUEHelpers/Private/StevesUI/FocusableUserWidget.cpp b/Source/StevesUEHelpers/Private/StevesUI/FocusableUserWidget.cpp index cd339af..5381e2a 100644 --- a/Source/StevesUEHelpers/Private/StevesUI/FocusableUserWidget.cpp +++ b/Source/StevesUEHelpers/Private/StevesUI/FocusableUserWidget.cpp @@ -27,6 +27,19 @@ bool UFocusableUserWidget::TakeFocusIfDesired_Implementation() return false; } +FReply UFocusableUserWidget::NativeOnFocusReceived(const FGeometry& InGeometry, const FFocusEvent& InFocusEvent) +{ + FReply Reply = Super::NativeOnFocusReceived(InGeometry, InFocusEvent); + + if (!Reply.IsEventHandled()) + { + SetFocusProperly(); + Reply.Handled(); + } + + return Reply; +} + void UFocusableUserWidget::NativeConstruct() { Super::NativeConstruct(); diff --git a/Source/StevesUEHelpers/Public/StevesUI/FocusableUserWidget.h b/Source/StevesUEHelpers/Public/StevesUI/FocusableUserWidget.h index 6c14528..6f4e827 100644 --- a/Source/StevesUEHelpers/Public/StevesUI/FocusableUserWidget.h +++ b/Source/StevesUEHelpers/Public/StevesUI/FocusableUserWidget.h @@ -25,6 +25,8 @@ protected: UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Focus") int AutomaticFocusPriority = 0; + virtual FReply NativeOnFocusReceived(const FGeometry& InGeometry, const FFocusEvent& InFocusEvent) override; + public: /// UWidget::SetFocus is not virtual FFS. This does the same as SetFocus by default but can be overridden, /// e.g. to delegate focus to specific children