--- Engine/Plugins/Developer/VisualStudioCodeSourceCodeAccess/Source/VisualStudioCodeSourceCodeAccess/Private/VisualStudioCodeSourceCodeAccessor.cpp.orig	2026-04-12 22:58:34.075320964 -0400
+++ Engine/Plugins/Developer/VisualStudioCodeSourceCodeAccess/Source/VisualStudioCodeSourceCodeAccess/Private/VisualStudioCodeSourceCodeAccessor.cpp	2026-04-12 23:03:40.139226303 -0400
@@ -149,7 +149,7 @@
 		FString SolutionDir = GetSolutionPath();
 		TArray<FString> Args;
 		Args.Add(MakePath(SolutionDir));
-		Args.Add(TEXT("-g ") + MakePath(FullPath) + FString::Printf(TEXT(":%d:%d"), LineNumber, ColumnNumber));
+		Args.Add(TEXT("-g ") + MakePath(FullPath + FString::Printf(TEXT(":%d:%d"), LineNumber, ColumnNumber)));
 		return Launch(Args);
 	}
 
--- Engine/Source/Editor/UnrealEd/Private/SourceCodeNavigation.cpp.orig	2026-04-12 22:58:34.169323705 -0400
+++ Engine/Source/Editor/UnrealEd/Private/SourceCodeNavigation.cpp	2026-04-12 23:04:02.208867909 -0400
@@ -463,7 +463,7 @@
 	ISourceCodeAccessModule& SourceCodeAccessModule = FModuleManager::LoadModuleChecked<ISourceCodeAccessModule>("SourceCodeAccess");
 	ISourceCodeAccessor& SourceCodeAccessor = SourceCodeAccessModule.GetAccessor();
 
-#if PLATFORM_WINDOWS
+#if PLATFORM_WINDOWS || PLATFORM_LINUX
 	FString SourceFileName;
 	uint32 SourceLineNumber = 1;
 	uint32 SourceColumnNumber = 0;
@@ -622,8 +622,8 @@
 	}
     
     UE_LOG(LogSelectionDetails, Warning, TEXT("NavigateToFunctionSource: Unable to look up symbol: %s in module:%s"), *FunctionSymbolName, *FunctionModuleName);
-    
-#endif	// PLATFORM_WINDOWS
+
+#endif	// PLATFORM_WINDOWS || PLATFORM_LINUX
 }
 
 
--- Engine/Source/Runtime/ApplicationCore/Private/Linux/LinuxPlatformApplicationMisc.cpp.orig	2026-04-12 22:58:34.254326184 -0400
+++ Engine/Source/Runtime/ApplicationCore/Private/Linux/LinuxPlatformApplicationMisc.cpp	2025-11-10 23:34:18.481701126 -0500
@@ -299,6 +299,9 @@
 		SDL_SetHint(SDL_HINT_MOUSE_RELATIVE_CURSOR_VISIBLE, "1"); // When relative mouse mode is active, don't hide cursor.
 		SDL_SetHint(SDL_HINT_MOUSE_RELATIVE_MODE_WARP, "0"); // Don't warp the cursor to the center in relative mouse mode.
 
+		// Unreal does its own dynamic capturing, we don't need SDL to do it.
+		SDL_SetHint(SDL_HINT_MOUSE_AUTO_CAPTURE, "0");
+
 		// If we're rendering offscreen, use the "dummy" SDL video driver
 		if (FParse::Param(FCommandLine::Get(), TEXT("RenderOffScreen")) && !getenv("SDL_VIDEODRIVER"))
 		{
--- Engine/Source/Runtime/Core/Private/Unix/UnixPlatformStackWalk.cpp.orig	2026-04-12 22:58:34.349328955 -0400
+++ Engine/Source/Runtime/Core/Private/Unix/UnixPlatformStackWalk.cpp	2026-04-12 23:05:56.395187515 -0400
@@ -15,6 +15,7 @@
 #include "HAL/ExceptionHandling.h"
 #include "HAL/PlatformProcess.h"
 #include "HAL/PlatformTime.h"
+#include "Modules/ModuleManager.h"
 #include "AutoRTFM.h"
 
 #include <link.h>
@@ -1060,3 +1061,69 @@
 	}
 	ReportLock.Unlock();
 }
+
+bool FUnixPlatformStackWalk::GetFunctionDefinitionLocation(const FString& FunctionSymbolName, const FString& FunctionModuleName, FString& OutPathname, uint32& OutLineNumber, uint32& OutColumnNumber)
+{
+	// Find the .so path for this module.
+	FString ModulePath;
+	TArray<FModuleStatus> AllModules;
+	FModuleManager::Get().QueryModules(AllModules);
+	for (const FModuleStatus& Status : AllModules)
+	{
+		if (FPaths::GetBaseFilename(Status.FilePath) == FunctionModuleName)
+		{
+			ModulePath = Status.FilePath;
+			break;
+		}
+	}
+	if (ModulePath.IsEmpty())
+	{
+		return false;
+	}
+
+	// Debug symbols are in a separate .debug file alongside the .so.
+	FString DebugPath = FPaths::ChangeExtension(ModulePath, TEXT("debug"));
+	if (!FPaths::FileExists(DebugPath))
+	{
+		return false;
+	}
+
+	// Use lldb to look up the source file and line number.
+	// Run: lldb -b -o "image lookup -v -n ClassName::FuncName" <debug_file>
+	FString LldbParams = FString::Printf(TEXT("-b -o \"image lookup -v -n %s\" \"%s\""), *FunctionSymbolName, *DebugPath);
+	int32 ReturnCode = 0;
+	FString AllOutput;
+	FString Errors;
+	FPlatformProcess::ExecProcess(TEXT("/usr/bin/lldb"), *LldbParams, &ReturnCode, &AllOutput, &Errors);
+	if (ReturnCode != 0)
+	{
+		return false;
+	}
+
+	// Parse the LineEntry from lldb verbose output.
+	// Format: "LineEntry: [0x...-0x...): /path/to/file.cpp:132"
+	TArray<FString> Lines;
+	AllOutput.ParseIntoArrayLines(Lines);
+	for (const FString& Line : Lines)
+	{
+		FString Trimmed = Line.TrimStartAndEnd();
+		if (!Trimmed.StartsWith(TEXT("LineEntry:")))
+			continue;
+
+		int32 ParenIndex = Trimmed.Find(TEXT("): "));
+		if (ParenIndex == INDEX_NONE)
+			continue;
+		FString FileAndLine = Trimmed.Mid(ParenIndex + 3);
+
+		int32 ColonIndex;
+		if (!FileAndLine.FindLastChar(TCHAR(':'), ColonIndex))
+			continue;
+
+		OutPathname = FileAndLine.Left(ColonIndex);
+		OutLineNumber = FCString::Atoi(*FileAndLine.Mid(ColonIndex + 1));
+		OutColumnNumber = 0;
+		return true;
+	}
+
+	return false;
+}
--- Engine/Source/Runtime/Core/Public/Unix/UnixPlatformStackWalk.h.orig	2026-04-12 22:58:34.451331930 -0400
+++ Engine/Source/Runtime/Core/Public/Unix/UnixPlatformStackWalk.h	2026-04-12 23:06:10.273590986 -0400
@@ -24,6 +24,8 @@
 	static CORE_API void ThreadStackWalkAndDump(ANSICHAR* HumanReadableString, SIZE_T HumanReadableStringSize, int32 IgnoreCount, uint32 ThreadId);
 	static CORE_API int32 GetProcessModuleCount();
 	static CORE_API int32 GetProcessModuleSignatures(FStackWalkModuleInfo *ModuleSignatures, const int32 ModuleSignaturesSize);
+
+	static CORE_API bool GetFunctionDefinitionLocation(const FString& FunctionSymbolName, const FString& FunctionModuleName, FString& OutPathname, uint32& OutLineNumber, uint32& OutColumnNumber);
 };
 
 typedef FUnixPlatformStackWalk FPlatformStackWalk;
