diff --git a/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs b/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs index 0f8eca595b..5c5a77ae9a 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs @@ -127,7 +127,6 @@ namespace Avalonia.Win32 } case WindowsMessage.WM_DPICHANGED: - if (!_ignoreDpiChanges) { _dpi = (uint)wParam >> 16; var newDisplayRect = Marshal.PtrToStructure(lParam); @@ -149,19 +148,6 @@ namespace Avalonia.Win32 return IntPtr.Zero; } - else - { - // In case parent is on another screen with different scaling, window will have header scaled with - // parent's scaling factor, so need to update frame - SetWindowPos(hWnd, - IntPtr.Zero, 0, 0, 0, 0, - SetWindowPosFlags.SWP_FRAMECHANGED | - SetWindowPosFlags.SWP_NOSIZE | - SetWindowPosFlags.SWP_NOMOVE | - SetWindowPosFlags.SWP_NOZORDER | - SetWindowPosFlags.SWP_NOACTIVATE); - } - break; case WindowsMessage.WM_GETICON: if (_iconImpl == null) diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index 612dd5c9dd..784ad7c2aa 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -104,7 +104,6 @@ namespace Avalonia.Win32 private bool _shown; private bool _hiddenWindowIsParent; private uint _langid; - private bool _ignoreDpiChanges; internal bool _ignoreWmChar; private WindowTransparencyLevel _transparencyLevel; private readonly WindowTransparencyLevel _defaultTransparencyLevel; @@ -730,20 +729,7 @@ namespace Avalonia.Win32 _hiddenWindowIsParent = parentHwnd == OffscreenParentWindow.Handle; - // I can't find mention of this *anywhere* online, but it seems that setting - // GWL_HWNDPARENT to a window which is on the non-primary monitor can cause two - // WM_DPICHANGED messages to be sent: the first changing the DPI to the parent's DPI, - // then another changing the DPI back. This then causes Windows to provide an incorrect - // suggested new rectangle to the WM_DPICHANGED message if the window is immediately - // moved to the parent window's monitor (e.g. when using - // WindowStartupLocation.CenterOwner) causing the window to be shown with an incorrect - // size. - // - // Just ignore any WM_DPICHANGED while we're setting the parent as this shouldn't - // change the DPI anyway. - _ignoreDpiChanges = true; SetWindowLongPtr(_hwnd, (int)WindowLongParam.GWL_HWNDPARENT, parentHwnd); - _ignoreDpiChanges = false; // Windows doesn't seem to respect the HWND_TOPMOST flag of a window when showing an owned window for the first time. // So we set the HWND_TOPMOST again before the owned window is shown. This only needs to be done once.