From f963da1b4099d1bcadae6f8d8669937c3a9ad0f1 Mon Sep 17 00:00:00 2001
From: Sine Striker <trueful@163.com>
Date: 周五, 29 12月 2023 09:14:59 +0800
Subject: [PATCH] Add object helper

---
 src/quick/quickwindowagent.h          |    4 ++--
 src/widgets/widgetwindowagent_win.cpp |   17 +++--------------
 src/core/qwkglobal_p.h                |   15 +++++++++++++--
 3 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/src/core/qwkglobal_p.h b/src/core/qwkglobal_p.h
index bc0d393..e311ee8 100644
--- a/src/core/qwkglobal_p.h
+++ b/src/core/qwkglobal_p.h
@@ -10,6 +10,7 @@
 // version without notice, or may even be removed.
 //
 
+#include <QtCore/QObject>
 #include <QtCore/QLoggingCategory>
 #include <QtGui/QMouseEvent>
 
@@ -42,6 +43,17 @@
 
 namespace QWK {
 
+    namespace Private {
+
+        class ObjectHelper : public QObject {
+        public:
+            static inline bool sendEvent(QObject *obj, QEvent *event) {
+                return static_cast<ObjectHelper *>(obj)->event(event);
+            }
+        };
+
+    }
+
     inline QPoint getMouseEventScenePos(const QMouseEvent *event) {
 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
         return event->scenePosition().toPoint();
@@ -49,7 +61,7 @@
         return event->windowPos().toPoint();
 #endif
     }
-    
+
     inline QPoint getMouseEventGlobalPos(const QMouseEvent *event) {
 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
         return event->globalPosition().toPoint();
@@ -57,7 +69,6 @@
         return event->screenPos().toPoint();
 #endif
     }
-    
 }
 
 #endif // QWKGLOBAL_P_H
diff --git a/src/quick/quickwindowagent.h b/src/quick/quickwindowagent.h
index 58703a8..b3ebc2b 100644
--- a/src/quick/quickwindowagent.h
+++ b/src/quick/quickwindowagent.h
@@ -31,8 +31,8 @@
         Q_INVOKABLE void setHitTestVisible(const QQuickItem *item, bool visible = true);
 
 #ifdef Q_OS_MAC
-        QQuickItem *systemButtonArea() const;
-        void setSystemButtonArea(QQuickItem *item);
+        Q_INVOKABLE QQuickItem *systemButtonArea() const;
+        Q_INVOKABLE void setSystemButtonArea(QQuickItem *item);
 #endif
 
     Q_SIGNALS:
diff --git a/src/widgets/widgetwindowagent_win.cpp b/src/widgets/widgetwindowagent_win.cpp
index 72d0057..0f4637d 100644
--- a/src/widgets/widgetwindowagent_win.cpp
+++ b/src/widgets/widgetwindowagent_win.cpp
@@ -5,6 +5,7 @@
 #include <QtGui/QPainter>
 
 #include <QWKCore/qwindowkit_windows.h>
+#include <QWKCore/private/qwkglobal_p.h>
 
 namespace QWK {
 
@@ -68,14 +69,8 @@
         }
 
         inline void resumeWidgetEventAndDraw(QWidget *w, QEvent *event) {
-            // Friend class helping to call `event`
-            class HackedWidget : public QWidget {
-            public:
-                friend class QWK::WidgetBorderHandler;
-            };
-
             // Let the widget paint first
-            static_cast<HackedWidget *>(w)->event(event);
+            Private::ObjectHelper::sendEvent(w, event);
 
             // Due to the timer or user action, Qt will repaint some regions spontaneously,
             // even if there is no WM_PAINT message, we must wait for it to finish painting
@@ -84,14 +79,8 @@
         }
 
         inline void resumeWindowEventAndDraw(QWindow *window, QEvent *event) {
-            // Friend class helping to call `event`
-            class HackedWindow : public QWindow {
-            public:
-                friend class QWK::WidgetBorderHandler;
-            };
-
             // Let Qt paint first
-            static_cast<HackedWindow *>(window)->event(event);
+            Private::ObjectHelper::sendEvent(window, event);
 
             // Upon receiving the WM_PAINT message, Qt will repaint the entire view, and we
             // must wait for it to finish painting before drawing this top border area.

--
Gitblit v1.9.1