From 09287f3d9e9e88271de2bfd5388dae5a53e8c6f5 Mon Sep 17 00:00:00 2001
From: Sine Striker <trueful@163.com>
Date: 摹曛, 07 12月 2023 15:03:24 +0800
Subject: [PATCH] Add host event filter

---
 src/core/contexts/win32windowcontext.cpp |   48 +++++++-----------------------------------------
 1 files changed, 7 insertions(+), 41 deletions(-)

diff --git a/src/core/contexts/win32windowcontext.cpp b/src/core/contexts/win32windowcontext.cpp
index 83e2cee..c5c1cbd 100644
--- a/src/core/contexts/win32windowcontext.cpp
+++ b/src/core/contexts/win32windowcontext.cpp
@@ -188,20 +188,12 @@
     }
 
     static inline void triggerFrameChange(HWND hwnd) {
-        Q_ASSERT(hwnd);
-        if (!hwnd) {
-            return;
-        }
         ::SetWindowPos(hwnd, nullptr, 0, 0, 0, 0,
                        SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER |
                            SWP_FRAMECHANGED);
     }
 
     static inline quint32 getDpiForWindow(HWND hwnd) {
-        Q_ASSERT(hwnd);
-        if (!hwnd) {
-            return 0;
-        }
         const DynamicApis &apis = DynamicApis::instance();
         if (apis.pGetDpiForWindow) {         // Win10
             return apis.pGetDpiForWindow(hwnd);
@@ -221,10 +213,6 @@
     }
 
     static inline quint32 getResizeBorderThickness(HWND hwnd) {
-        Q_ASSERT(hwnd);
-        if (!hwnd) {
-            return 0;
-        }
         const DynamicApis &apis = DynamicApis::instance();
         if (apis.pGetSystemMetricsForDpi) {
             const quint32 dpi = getDpiForWindow(hwnd);
@@ -236,10 +224,6 @@
     }
 
     static inline quint32 getTitleBarHeight(HWND hwnd) {
-        Q_ASSERT(hwnd);
-        if (!hwnd) {
-            return 0;
-        }
         const auto captionHeight = [hwnd]() -> int {
             const DynamicApis &apis = DynamicApis::instance();
             if (apis.pGetSystemMetricsForDpi) {
@@ -253,11 +237,6 @@
     }
 
     static inline void updateInternalWindowFrameMargins(HWND hwnd, QWindow *window) {
-        Q_ASSERT(hwnd);
-        Q_ASSERT(window);
-        if (!hwnd || !window) {
-            return;
-        }
         const auto margins = [hwnd]() -> QMargins {
             const int titleBarHeight = getTitleBarHeight(hwnd);
             if (isWin10OrGreater()) {
@@ -285,10 +264,6 @@
     }
 
     static inline MONITORINFOEXW getMonitorForWindow(HWND hwnd) {
-        Q_ASSERT(hwnd);
-        if (!hwnd) {
-            return {};
-        }
         // Use "MONITOR_DEFAULTTONEAREST" here so that we can still get the correct
         // monitor even if the window is minimized.
         HMONITOR monitor = ::MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);
@@ -299,16 +274,13 @@
     };
 
     static inline void moveToDesktopCenter(HWND hwnd) {
-        Q_ASSERT(hwnd);
-        if (!hwnd) {
-            return;
-        }
         const auto monitorInfo = getMonitorForWindow(hwnd);
         RECT windowRect{};
         ::GetWindowRect(hwnd, &windowRect);
         const auto newX = (RECT_WIDTH(monitorInfo.rcMonitor) - RECT_WIDTH(windowRect)) / 2;
         const auto newY = (RECT_HEIGHT(monitorInfo.rcMonitor) - RECT_HEIGHT(windowRect)) / 2;
-        ::SetWindowPos(hwnd, nullptr, newX, newY, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER);
+        ::SetWindowPos(hwnd, nullptr, newX, newY, 0, 0,
+                       SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER);
     }
 
     static inline bool isFullScreen(HWND hwnd) {
@@ -538,8 +510,7 @@
         return ::CallWindowProcW(g_qtWindowProc, hWnd, message, wParam, lParam);
     }
 
-    Win32WindowContext::Win32WindowContext(QObject *host, WindowItemDelegate *delegate)
-        : AbstractWindowContext(host, delegate) {
+    Win32WindowContext::Win32WindowContext() : AbstractWindowContext() {
     }
 
     Win32WindowContext::~Win32WindowContext() {
@@ -554,11 +525,7 @@
         }
     }
 
-    bool Win32WindowContext::setup() {
-        if (!m_windowHandle) {
-            return false;
-        }
-
+    bool Win32WindowContext::setupHost() {
         // Install window hook
         auto winId = m_windowHandle->winId();
         auto hWnd = reinterpret_cast<HWND>(winId);
@@ -908,7 +875,8 @@
             case WM_SHOWWINDOW: {
                 if (!centered) {
                     // If wParam is TRUE, the window is being shown.
-                    // If lParam is zero, the message was sent because of a call to the ShowWindow function.
+                    // If lParam is zero, the message was sent because of a call to the ShowWindow
+                    // function.
                     if (wParam && lParam == 0) {
                         centered = true;
                         moveToDesktopCenter(hWnd);
@@ -1004,7 +972,7 @@
                 // and align it with the upper-left corner of our new client area".
                 const auto clientRect =
                     wParam ? &(reinterpret_cast<LPNCCALCSIZE_PARAMS>(lParam))->rgrc[0]
-                                       : reinterpret_cast<LPRECT>(lParam);
+                           : reinterpret_cast<LPRECT>(lParam);
                 if (isWin10OrGreater()) {
                     // Store the original top margin before the default window procedure applies the
                     // default frame.
@@ -1292,8 +1260,6 @@
                                 break;
                             case CoreWindowAgent::Close:
                                 *result = HTCLOSE;
-                                break;
-                            case CoreWindowAgent::Unknown:
                                 break;
                             default:
                                 break; // unreachable

--
Gitblit v1.9.1