From cf0158ddba21ae9c7d591bc93bf03d371f2dad98 Mon Sep 17 00:00:00 2001 From: M0N7Y5 <17201053+M0n7y5@users.noreply.github.com> Date: Mon, 16 Jun 2025 11:38:14 +0200 Subject: [PATCH] fix: Prevent DXGI from intercepting Alt+Enter and PrintScreen (#18970) * disable key shortcuts forced by dxgi composition * moved enum, fixed types --- src/Windows/Avalonia.Win32/DirectX/DirectXEnums.cs | 8 ++++++++ src/Windows/Avalonia.Win32/DirectX/DxgiRenderTarget.cs | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Windows/Avalonia.Win32/DirectX/DirectXEnums.cs b/src/Windows/Avalonia.Win32/DirectX/DirectXEnums.cs index 1357e8aa63..ac6f0678d7 100644 --- a/src/Windows/Avalonia.Win32/DirectX/DirectXEnums.cs +++ b/src/Windows/Avalonia.Win32/DirectX/DirectXEnums.cs @@ -213,6 +213,14 @@ namespace Avalonia.Win32.DirectX DXGI_ERROR_WAS_STILL_DRAWING = 0x887A000A } + [Flags] + internal enum DXGI_MWA : uint + { + DXGI_MWA_NO_WINDOW_CHANGES = 1, + DXGI_MWA_NO_ALT_ENTER = 2, + DXGI_MWA_NO_PRINT_SCREEN = 4 + } + internal static class DxgiErrorExtensions { public static bool IsDeviceLostError(this DXGI_ERROR error) diff --git a/src/Windows/Avalonia.Win32/DirectX/DxgiRenderTarget.cs b/src/Windows/Avalonia.Win32/DirectX/DxgiRenderTarget.cs index 513aba4f20..c7306ce86e 100644 --- a/src/Windows/Avalonia.Win32/DirectX/DxgiRenderTarget.cs +++ b/src/Windows/Avalonia.Win32/DirectX/DxgiRenderTarget.cs @@ -23,7 +23,7 @@ namespace Avalonia.Win32.DirectX private IUnknown? _renderTexture; private RECT _clientRect; - + public DxgiRenderTarget(EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo window, EglContext context, DxgiConnection connection) : base(context) { _window = window; @@ -68,6 +68,8 @@ namespace Avalonia.Win32.DirectX null ); + _dxgiFactory.MakeWindowAssociation(window.Handle, (uint)(DXGI_MWA.DXGI_MWA_NO_ALT_ENTER | DXGI_MWA.DXGI_MWA_NO_PRINT_SCREEN)); + GetClientRect(_window.Handle, out var pClientRect); _clientRect = pClientRect; }