From 56236b0579ab27cc74cb1ce0c7fc9033cf17378c Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Sun, 7 Jul 2024 23:59:00 +0300 Subject: [PATCH] Enable modern Windows dialog boxes --- .../Platforms/Windows/WindowsToolchainBase.cs | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/Source/Tools/Flax.Build/Platforms/Windows/WindowsToolchainBase.cs b/Source/Tools/Flax.Build/Platforms/Windows/WindowsToolchainBase.cs index e5a3ada5d..d80ed60a1 100644 --- a/Source/Tools/Flax.Build/Platforms/Windows/WindowsToolchainBase.cs +++ b/Source/Tools/Flax.Build/Platforms/Windows/WindowsToolchainBase.cs @@ -408,6 +408,16 @@ namespace Flax.Build.Platforms options.CompileEnv.PreprocessorDefinitions.Add("_WINDOWS"); if (Architecture == TargetArchitecture.x64) options.CompileEnv.PreprocessorDefinitions.Add("WIN64"); + + // Linker may need access to rc.exe for embedding manifests, + // inject the location into PATH of current process so linker can inherit it from it. + if (!string.IsNullOrEmpty(_resourceCompilerPath)) + { + string binRootDir = Directory.GetParent(_resourceCompilerPath).FullName; + var path = Environment.GetEnvironmentVariable("PATH"); + if (!string.IsNullOrEmpty(_resourceCompilerPath) && !path.Contains(binRootDir)) + Environment.SetEnvironmentVariable("PATH", path + ";" + binRootDir); + } } /// @@ -836,8 +846,27 @@ namespace Flax.Build.Platforms } else { - // Don't create Side-by-Side Assembly Manifest - args.Add("/MANIFEST:NO"); + // Embed Side-by-Side Assembly Manifest + args.Add("/MANIFEST:EMBED"); + + // Required manifest information for modern visual styles in Windows Common Controls + switch (Architecture) + { + case TargetArchitecture.ARM: + args.Add("\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='arm' publicKeyToken='6595b64144ccf1df' language='*'\""); + break; + case TargetArchitecture.ARM64: + args.Add("\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='arm64' publicKeyToken='6595b64144ccf1df' language='*'\""); + break; + case TargetArchitecture.x86: + args.Add("\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='' publicKeyToken='6595b64144ccf1df' language='*'\""); + break; + case TargetArchitecture.x64: + args.Add("\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\""); + break; + default: + break; + } // Fixed Base Address args.Add("/FIXED:NO");