From abdad66bae077da6c3480db457beb47df5eda813 Mon Sep 17 00:00:00 2001
From: SineStriker <trueful@163.com>
Date: 周六, 16 12月 2023 19:27:16 +0800
Subject: [PATCH] Fix mac window mistakes

---
 src/widgets/widgetwindowagent_cocoa.cpp |   32 ++++++++++++++++++++------------
 1 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/src/widgets/widgetwindowagent_cocoa.cpp b/src/widgets/widgetwindowagent_cocoa.cpp
index d381f6d..cccb5fe 100644
--- a/src/widgets/widgetwindowagent_cocoa.cpp
+++ b/src/widgets/widgetwindowagent_cocoa.cpp
@@ -1,10 +1,10 @@
 #include "widgetwindowagent_p.h"
 
+#include <QtCore/QDebug>
+
 namespace QWK {
 
     class TitleBarEventFilter : public QObject {
-        Q_OBJECT
-
     public:
         explicit TitleBarEventFilter(AbstractWindowContext *context, QObject *parent = nullptr);
         ~TitleBarEventFilter() override;
@@ -15,9 +15,12 @@
     private:
         AbstractWindowContext *m_context;
         bool m_leftButtonPressed;
-    }
+        bool m_moving;
+    };
 
-    TitleBarEventFilter::TitleBarEventFilter(QObject *parent) : QObject(parent), m_context(context), m_leftButtonPressed(false) {}
+    TitleBarEventFilter::TitleBarEventFilter(AbstractWindowContext *context, QObject *parent)
+        : QObject(parent), m_context(context), m_leftButtonPressed(false), m_moving(false) {
+    }
 
     TitleBarEventFilter::~TitleBarEventFilter() = default;
 
@@ -31,8 +34,8 @@
         const QPoint scenePos = mouseEvent->scenePosition().toPoint();
         const QPoint globalPos = mouseEvent->globalPosition().toPoint();
 #else
-        const QPoint scenePos = mouseEvent->windowPos().toPoint();
-        const QPoint globalPos = mouseEvent->screenPos().toPoint();
+        const QPoint scenePos = me->windowPos().toPoint();
+        const QPoint globalPos = me->screenPos().toPoint();
 #endif
         if (!m_context->isInTitleBarDraggableArea(scenePos)) {
             return false;
@@ -41,6 +44,7 @@
             case QEvent::MouseButtonPress: {
                 if (me->button() == Qt::LeftButton) {
                     m_leftButtonPressed = true;
+                    m_moving = false;
                     event->accept();
                     return true;
                 }
@@ -49,6 +53,7 @@
             case QEvent::MouseButtonRelease: {
                 if (me->button() == Qt::LeftButton) {
                     m_leftButtonPressed = false;
+                    m_moving = false;
                     event->accept();
                     return true;
                 }
@@ -56,7 +61,10 @@
             }
             case QEvent::MouseMove: {
                 if (m_leftButtonPressed) {
-                    static_cast<QWidget *>(object)->windowHandle()->startSystemMove();
+                    if (!m_moving) {
+                        m_moving = true;
+                        m_context->window()->startSystemMove();
+                    }
                     event->accept();
                     return true;
                 }
@@ -64,7 +72,7 @@
             }
             case QEvent::MouseButtonDblClick: {
                 if (me->button() == Qt::LeftButton) {
-                    QWidget *window = static_cast<QWidget *>(object)->window();
+                    auto window = static_cast<QWidget *>(object)->window();
                     if (!window->isFullScreen()) {
                         if (window->isMaximized()) {
                             window->showNormal();
@@ -77,8 +85,10 @@
                 }
                 break;
             }
-            default:
-                break;
+            default: {
+                Q_UNREACHABLE();
+                return false;
+            }
         }
         return false;
     }
@@ -88,5 +98,3 @@
     }
 
 }
-
-#include "widgetwindowagent_cocoa.moc"

--
Gitblit v1.9.1