From 024f6fc1a970778a5a6393a8fcd847fd52760097 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 10 Aug 2021 15:04:30 +0300 Subject: [PATCH] Fix window frame glitches on Windows 7. --- ui/platform/win/ui_window_win.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/ui/platform/win/ui_window_win.cpp b/ui/platform/win/ui_window_win.cpp index 1b3fac5..2c72ddb 100644 --- a/ui/platform/win/ui_window_win.cpp +++ b/ui/platform/win/ui_window_win.cpp @@ -101,6 +101,24 @@ HRESULT WinApiSetWindowTheme( return method ? method(hWnd, pszSubAppName, pszSubIdList) : HRESULT(); } +void FixAeroSnap(HWND handle) { + SetWindowLongPtr( + handle, + GWL_STYLE, + GetWindowLongPtr(handle, GWL_STYLE) | WS_CAPTION | WS_THICKFRAME); +} + +[[nodiscard]] HWND ResolveWindowHandle(not_null widget) { + if (!::Platform::IsWindows8OrGreater()) { + widget->setWindowFlag(Qt::FramelessWindowHint); + } + const auto result = GetWindowHandle(widget); + if (!::Platform::IsWindows8OrGreater()) { + FixAeroSnap(result); + } + return result; +} + } // namespace class WindowHelper::NativeFilter final : public QAbstractNativeEventFilter { @@ -145,7 +163,7 @@ bool WindowHelper::NativeFilter::nativeEventFilter( WindowHelper::WindowHelper(not_null window) : BasicWindowHelper(window) -, _handle(GetWindowHandle(window)) +, _handle(ResolveWindowHandle(window)) , _title(Ui::CreateChild(window.get())) , _body(Ui::CreateChild(window.get())) , _shadow(std::in_place, window, st::windowShadowFg->c) { @@ -172,6 +190,12 @@ void WindowHelper::setTitleStyle(const style::WindowTitle &st) { } void WindowHelper::setNativeFrame(bool enabled) { + if (!::Platform::IsWindows8OrGreater()) { + window()->windowHandle()->setFlag(Qt::FramelessWindowHint, !enabled); + if (!enabled) { + FixAeroSnap(_handle); + } + } _title->setVisible(!enabled); if (enabled) { _shadow.reset();