From 27604c5152cd9b768c31cbb1947e0138cea2c484 Mon Sep 17 00:00:00 2001
From: Sine Striker <trueful@163.com>
Date: 周三, 13 12月 2023 23:35:11 +0800
Subject: [PATCH] Remove qwkcoreglobal

---
 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 2049d29..15418e2 100644
--- a/src/quick/quickwindowagent_win.cpp
+++ b/src/quick/quickwindowagent_win.cpp
@@ -3,11 +3,11 @@
 #include <QtQuick/QQuickPaintedItem>
 #include <QtQuick/private/qquickitem_p.h>
 
-#include <QWKCore/private/eventobserver_p.h>
+#include <QWKCore/private/nativeeventfilter_p.h>
 
 namespace QWK {
 
-    class BorderItem : public QQuickPaintedItem, public EventObserver {
+    class BorderItem : public QQuickPaintedItem, public NativeEventFilter {
         Q_OBJECT
     public:
         explicit BorderItem(QQuickItem *parent, AbstractWindowContext *context);
@@ -20,7 +20,8 @@
         void itemChange(ItemChange change, const ItemChangeData &data) override;
 
     protected:
-        bool observe(QEvent *event) override;
+        bool nativeEventFilter(const QByteArray &eventType, void *message,
+                               QT_NATIVE_EVENT_RESULT_TYPE *result) override;
 
         AbstractWindowContext *context;
 
@@ -44,7 +45,7 @@
 
         setZ(10);
 
-        context->addObserver(this);
+        context->installNativeEventFilter(this);
         connect(window(), &QQuickWindow::activeChanged, this,
                 &BorderItem::_q_windowActivityChanged);
         updateGeometry();
@@ -80,13 +81,27 @@
         }
     }
 
-    bool BorderItem::observe(QEvent *event) {
-        switch (event->type()) {
-            case QEvent::UpdateLater: {
+    bool BorderItem::nativeEventFilter(const QByteArray &eventType, void *message,
+                                       QT_NATIVE_EVENT_RESULT_TYPE *result) {
+        Q_UNUSED(eventType)
+        auto msg = reinterpret_cast<const MSG *>(message);
+        switch (msg->message) {
+            case WM_THEMECHANGED:
+            case WM_SYSCOLORCHANGE:
+            case WM_DWMCOLORIZATIONCOLORCHANGED: {
                 update();
                 break;
             }
 
+            case WM_SETTINGCHANGE: {
+                if (!msg->wParam && msg->lParam &&
+                    std::wcscmp(reinterpret_cast<LPCWSTR>(msg->lParam), L"ImmersiveColorSet") ==
+                        0) {
+                    update();
+                }
+                break;
+            }
+
             default:
                 break;
         }

--
Gitblit v1.9.1