Simplify keyboard focus rule to just 'widget in front', full stop.
This commit is contained in:
@@ -131,13 +131,6 @@ UInputComponent* AlxPlayerControllerBase::GetWidgetInputComponent(UUserWidget *W
|
||||
return Cast<UInputComponent>(Value);
|
||||
}
|
||||
|
||||
void AlxPlayerControllerBase::RestoreFocusToFrontWidget(const UObject *Context)
|
||||
{
|
||||
// This will trigger UpdateInputMode to shift focus back to
|
||||
// the front window, if the front window wants focus.
|
||||
FromContext(Context)->RootCanvas->LastWidgetGrantedFocus = nullptr;
|
||||
}
|
||||
|
||||
void AlxPlayerControllerBase::AddWidgetToRoot(UUserWidget *Widget)
|
||||
{
|
||||
if (!IsValid(Widget))
|
||||
@@ -309,32 +302,20 @@ void AlxPlayerControllerBase::UpdateInputMode()
|
||||
|
||||
GameViewportClient->SetIgnoreInput(false);
|
||||
|
||||
// How we handle focus depends on whether we're showing the pointer.
|
||||
// In pointer mode, we set focus to the desired state just once,
|
||||
// and then we let the pointer control it from there on. In
|
||||
// no-pointer mode, we set focus to the desired state and
|
||||
// keep putting it back forever.
|
||||
//
|
||||
// If the user clicks the mouse on a focusable widget, the
|
||||
// viewport client notifies us of that fact. We then focus the
|
||||
// widget if possible.
|
||||
//
|
||||
if ((!ShowPointer) || (RootCanvas->LastWidgetGrantedFocus != Focus))
|
||||
// We always put keyboard focus on whatever user widget is in
|
||||
// front. If the front widget doesn't want keyboard focus,
|
||||
// then we put keyboard focus on the viewport.
|
||||
if (Focus)
|
||||
{
|
||||
if (Focus)
|
||||
if (TSharedPtr<SWidget> SlateFocus = Focus->GetCachedWidget())
|
||||
{
|
||||
if (TSharedPtr<SWidget> SlateFocus = Focus->GetCachedWidget())
|
||||
{
|
||||
SlateOperations.SetUserFocus(SlateFocus.ToSharedRef());
|
||||
RootCanvas->LastWidgetGrantedFocus = Focus;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SlateOperations.SetUserFocus(ViewportWidgetRef);
|
||||
RootCanvas->LastWidgetGrantedFocus = nullptr;
|
||||
SlateOperations.SetUserFocus(SlateFocus.ToSharedRef());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SlateOperations.SetUserFocus(ViewportWidgetRef);
|
||||
}
|
||||
}
|
||||
|
||||
void AlxPlayerControllerBase::UpdateLookAt()
|
||||
|
||||
@@ -65,10 +65,6 @@ public:
|
||||
// FProperty so we always see the current value without caching it.
|
||||
static class UInputComponent* GetWidgetInputComponent(class UUserWidget *Widget);
|
||||
|
||||
// Restore focus back to the window that is in front, if it wants focus.
|
||||
UFUNCTION(BlueprintCallable, meta = (WorldContext = "Context"), Category = "Luprex|Root Canvas")
|
||||
static void RestoreFocusToFrontWidget(const UObject *Context);
|
||||
|
||||
// Add a widget to the root canvas at ZOrder 0 with default slot flags.
|
||||
UFUNCTION(BlueprintCallable, Category = "Luprex|Root Canvas",
|
||||
meta = (DefaultToSelf = "Widget", HideSelfPin = "true"))
|
||||
|
||||
@@ -101,8 +101,6 @@ void UlxRootCanvasPanel::BringToFront(UUserWidget *Widget)
|
||||
UlxRootCanvasPanel *Panel = Cast<UlxRootCanvasPanel>(Slot->Parent);
|
||||
if (!Panel) return;
|
||||
Slot->BringToFrontCount = ++Panel->BringToFrontCounter;
|
||||
// This refocuses the widget, even if it was already in front.
|
||||
Panel->LastWidgetGrantedFocus = Panel;
|
||||
}
|
||||
|
||||
void UlxRootCanvasPanel::SetWidgetWindowManagement(class UUserWidget *Widget,
|
||||
|
||||
@@ -129,9 +129,6 @@ public:
|
||||
meta = (DefaultToSelf = "Widget", ExpandEnumAsExecs = "Result"))
|
||||
static UlxRootCanvasSlot *GetRootCanvasSlot(class UUserWidget *Widget, ElxSuccessOrWrongType &Result);
|
||||
|
||||
// The last widget whose focus request was granted.
|
||||
TObjectKey<UWidget> LastWidgetGrantedFocus;
|
||||
|
||||
protected:
|
||||
|
||||
// We inherit most of our code from CanvasPanel. This causes the
|
||||
|
||||
Reference in New Issue
Block a user