From d905187230c893bd387656278f57c60ffe6f2507 Mon Sep 17 00:00:00 2001
From: Sine Striker <trueful@163.com>
Date: 周三, 27 12月 2023 21:07:42 +0800
Subject: [PATCH] minor tweaks

---
 src/widgets/widgetwindowagent_mac.cpp |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/widgets/widgetwindowagent_mac.cpp b/src/widgets/widgetwindowagent_mac.cpp
index 31f45e6..42f8dad 100644
--- a/src/widgets/widgetwindowagent_mac.cpp
+++ b/src/widgets/widgetwindowagent_mac.cpp
@@ -4,6 +4,10 @@
 
 namespace QWK {
 
+    static inline QRect getWidgetSceneRect(QWidget *widget) {
+        return {widget->mapTo(widget->window(), {}), widget->size()};
+    }
+
     class SystemButtonAreaWidgetEventFilter : public QObject {
     public:
         SystemButtonAreaWidgetEventFilter(QWidget *widget, AbstractWindowContext *ctx,
@@ -19,8 +23,7 @@
             switch (event->type()) {
                 case QEvent::Move:
                 case QEvent::Resize: {
-                    QRect rect(widget->mapTo(widget->window(), {}), widget->size());
-                    ctx->setSystemButtonArea(rect);
+                    ctx->setSystemButtonArea(getWidgetSceneRect(widget));
                     break;
                 }
 
@@ -49,6 +52,9 @@
     */
     void WidgetWindowAgent::setSystemButtonArea(QWidget *widget) {
         Q_D(WidgetWindowAgent);
+        if (d->systemButtonAreaWidget == widget)
+            return;
+
         auto ctx = d->context.get();
         d->systemButtonAreaWidget = widget;
         if (!widget) {
@@ -58,6 +64,7 @@
         }
         d->systemButtonAreaWidgetEventFilter =
             std::make_unique<SystemButtonAreaWidgetEventFilter>(widget, ctx);
+        ctx->setSystemButtonArea(getWidgetSceneRect(widget));
     }
 
 }
\ No newline at end of file

--
Gitblit v1.9.1