View Issue Details

IDProjectCategoryView StatusLast Update
0004981NoesisGUIUnrealpublic2026-04-13 15:02
Reporterttermeer-rcg Assigned Tohcpizzi  
PrioritynormalSeveritymajor 
Status resolvedResolutionfixed 
Product Version3.2.12 
Target Version3.2.13Fixed in Version3.2.13 
Summary0004981: Keyboard inputs no longer working after ALT+TAB
Description

Reproduction Steps:

  • Launch Samples project
  • Start UserControl level
  • Move with arrow keys and use space bar to press down/up arrow buttons (working as intended)
  • ALT+TAB to an other window
  • Click inside that window
  • ALT+TAB back to the Game/Unreal Editor
  • Notice space bar no longer working to press the down/up arrow buttons. (arrow keys and enter still working)

Unreal: 5.6.1

This seems to also affect any KeyBinding in XAML. If those KeyBinding correspond to a gamepad input, they also stop working. GamepadTrigger is however unaffected.

PlatformWindows

Activities

hcpizzi

hcpizzi

2026-04-13 15:01

developer   ~0012189

Please, find a patch attached until 3.2.13 is released.

4981.patch (3,124 bytes)   
Index: Classes/NoesisInstance.h
===================================================================
--- Classes/NoesisInstance.h	(revision 16994)
+++ Classes/NoesisInstance.h	(revision 16995)
@@ -140,6 +140,8 @@
 	typedef TSharedPtr<class FNoesisSlateElement, ESPMode::ThreadSafe> FNoesisSlateElementPtr;
 	FNoesisSlateElementPtr NoesisSlateElement;
 
+	TWeakPtr<SWindow> SlateParentWindowPtr;
+
 	UPROPERTY()
 	TObjectPtr<class UWidgetComponent> WidgetComponent;
 
@@ -276,6 +278,9 @@
 	virtual void NativeConstruct() override;
 	virtual void NativeDestruct() override;
 	// End of UUserWidget interface
+
+	void OnOwningWindowActivated();
+	void OnOwningWindowDeactivated();
 };
 
 FDelegateHandle NoesisRegisterOverlayRender();
Index: Private/NoesisInstance.cpp
===================================================================
--- Private/NoesisInstance.cpp	(revision 16994)
+++ Private/NoesisInstance.cpp	(revision 16995)
@@ -1429,6 +1429,31 @@
 	Height = SlateRectSize.Y;
 
 	Update();
+
+	if (MyWidget.IsValid())
+	{
+		auto SlateParentWindow = FSlateApplication::Get().FindWidgetWindow(MyWidget.Pin().ToSharedRef());
+		if (SlateParentWindow.IsValid() && SlateParentWindow != SlateParentWindowPtr)
+		{
+			if (SlateParentWindowPtr.IsValid())
+			{
+				auto OldSlateParentWindow = SlateParentWindowPtr.Pin();
+				OldSlateParentWindow->GetOnWindowActivatedEvent().RemoveAll(this);
+				OldSlateParentWindow->GetOnWindowDeactivatedEvent().RemoveAll(this);
+			}
+
+			SlateParentWindowPtr = SlateParentWindow;
+
+			if (!SlateParentWindow->GetOnWindowActivatedEvent().IsBoundToObject(this))
+			{
+				SlateParentWindow->GetOnWindowActivatedEvent().AddUObject(this, &UNoesisInstance::OnOwningWindowActivated);
+			}
+			if (!SlateParentWindow->GetOnWindowDeactivatedEvent().IsBoundToObject(this))
+			{
+				SlateParentWindow->GetOnWindowDeactivatedEvent().AddUObject(this, &UNoesisInstance::OnOwningWindowDeactivated);
+			}
+		}
+	}
 }
 
 bool GetHitResultAtScreenPositionAndCache(APlayerController* PlayerController, FVector2D ScreenPosition, FHitResult& HitResult)
@@ -2089,11 +2114,43 @@
 
 void UNoesisInstance::NativeDestruct()
 {
+	if (MyWidget.IsValid())
+	{
+		if (SlateParentWindowPtr.IsValid())
+		{
+			auto SlateParentWindow = SlateParentWindowPtr.Pin();
+			SlateParentWindow->GetOnWindowActivatedEvent().RemoveAll(this);
+			SlateParentWindow->GetOnWindowDeactivatedEvent().RemoveAll(this);
+		}
+	}
+
 	TermInstance();
 
 	Super::NativeDestruct();
 }
 
+void UNoesisInstance::OnOwningWindowActivated()
+{
+	if (TakeWidget().Get().HasAnyUserFocusOrFocusedDescendants())
+	{
+		if (XamlView != nullptr)
+		{
+			XamlView->Activate();
+		}
+	}
+}
+
+void UNoesisInstance::OnOwningWindowDeactivated()
+{
+	if (TakeWidget().Get().HasAnyUserFocusOrFocusedDescendants())
+	{
+		if (XamlView != nullptr)
+		{
+			XamlView->Deactivate();
+		}
+	}
+}
+
 // This is a copy of FMobileSceneRenderer::RequiresMultiPass
 static bool RequiresMultiPass(EShaderPlatform ShaderPlatform, uint32 NumMSAASamples)
 {
4981.patch (3,124 bytes)   

Issue History

Date Modified Username Field Change
2026-04-09 16:43 ttermeer-rcg New Issue
2026-04-09 17:19 sfernandez Assigned To => hcpizzi
2026-04-09 17:19 sfernandez Status new => assigned
2026-04-09 17:19 sfernandez Target Version => 3.2.13
2026-04-13 15:01 hcpizzi Note Added: 0012189
2026-04-13 15:01 hcpizzi File Added: 4981.patch
2026-04-13 15:02 hcpizzi Status assigned => resolved
2026-04-13 15:02 hcpizzi Resolution open => fixed
2026-04-13 15:02 hcpizzi Fixed in Version => 3.2.13