From 6f6f96909e7ded6ae3a4e59d9d4b62fa593abb23 Mon Sep 17 00:00:00 2001
From: Sine Striker <trueful@163.com>
Date: 周日, 25 2月 2024 02:33:03 +0800
Subject: [PATCH] Fix quick initialization failure

---
 src/quick/quickwindowagent_win.cpp |   29 ++++++++++++++++++++++-------
 1 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/src/quick/quickwindowagent_win.cpp b/src/quick/quickwindowagent_win.cpp
index a1966fd..a265bbb 100644
--- a/src/quick/quickwindowagent_win.cpp
+++ b/src/quick/quickwindowagent_win.cpp
@@ -1,3 +1,7 @@
+// Copyright (C) 2023-2024 Stdware Collections (https://www.github.com/stdware)
+// Copyright (C) 2021-2023 wangwenx190 (Yuhang Zhao)
+// SPDX-License-Identifier: Apache-2.0
+
 #include "quickwindowagent_p.h"
 
 #include <QtQuick/QQuickPaintedItem>
@@ -7,7 +11,11 @@
 
 namespace QWK {
 
-#if QWINDOWKIT_CONFIG(ENABLE_WINDOWS_SYSTEM_BORDER)
+#if QWINDOWKIT_CONFIG(ENABLE_WINDOWS_SYSTEM_BORDERS)
+    // TODO: Find a way to draw native border
+    // We haven't found a way to place hooks in the Quick program and call the GDI API to draw
+    // the native border area so that we'll use the emulated drawn border for now.
+
     class BorderItem : public QQuickPaintedItem,
                        public NativeEventFilter,
                        public SharedEventFilter {
@@ -37,7 +45,7 @@
 
     BorderItem::BorderItem(QQuickItem *parent, AbstractWindowContext *context)
         : QQuickPaintedItem(parent), context(context) {
-        setAntialiasing(true);   // We needs anti-aliasing to give us better result.
+        setAntialiasing(true);   // We need anti-aliasing to give us better result.
         setFillColor({});        // Will improve the performance a little bit.
         setOpaquePainting(true); // Will also improve the performance, we don't draw
                                  // semi-transparent borders of course.
@@ -48,7 +56,8 @@
         anchors->setLeft(parentPri->left());
         anchors->setRight(parentPri->right());
 
-        setZ(9999); // Make sure our fake border always above everything in the window.
+        setZ(std::numeric_limits<qreal>::max()); // Make sure our fake border always above
+                                                 // everything in the window.
 
         context->installNativeEventFilter(this);
         context->installSharedEventFilter(this);
@@ -61,7 +70,7 @@
     BorderItem::~BorderItem() = default;
 
     bool BorderItem::isNormalWindow() const {
-        return !(context->window()->windowState() &
+        return !(context->window()->windowStates() &
                  (Qt::WindowMinimized | Qt::WindowMaximized | Qt::WindowFullScreen));
     }
 
@@ -97,6 +106,7 @@
     bool BorderItem::nativeEventFilter(const QByteArray &eventType, void *message,
                                        QT_NATIVE_EVENT_RESULT_TYPE *result) {
         Q_UNUSED(eventType)
+
         const auto msg = static_cast<const MSG *>(message);
         switch (msg->message) {
             case WM_THEMECHANGED:
@@ -107,9 +117,7 @@
             }
 
             case WM_SETTINGCHANGE: {
-                if (!msg->wParam && msg->lParam &&
-                    std::wcscmp(reinterpret_cast<LPCWSTR>(msg->lParam), L"ImmersiveColorSet") ==
-                        0) {
+                if (isImmersiveColorSetChange(msg->wParam, msg->lParam)) {
                     update();
                 }
                 break;
@@ -123,7 +131,14 @@
 
     bool BorderItem::sharedEventFilter(QObject *obj, QEvent *event) {
         Q_UNUSED(obj)
+
         switch (event->type()) {
+            case QEvent::WinIdChange: {
+                if (auto winId = context->windowId()) {
+                    updateGeometry();
+                }
+                break;
+            }
             case QEvent::WindowStateChange: {
                 updateGeometry();
                 break;

--
Gitblit v1.9.1