From 76924a335f40a0c3cc13805b4cb9429c336d33ca Mon Sep 17 00:00:00 2001
From: SineStriker <trueful@163.com>
Date: 周五, 29 12月 2023 11:34:22 +0800
Subject: [PATCH] Optimize system button area APIs

---
 src/quick/quickwindowagent_mac.cpp |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/quick/quickwindowagent_mac.cpp b/src/quick/quickwindowagent_mac.cpp
index 0e19772..87895fb 100644
--- a/src/quick/quickwindowagent_mac.cpp
+++ b/src/quick/quickwindowagent_mac.cpp
@@ -27,11 +27,14 @@
                 &SystemButtonAreaItemHandler::updateSystemButtonArea);
         connect(item, &QQuickItem::heightChanged, this,
                 &SystemButtonAreaItemHandler::updateSystemButtonArea);
-        updateSystemButtonArea();
+
+        ctx->setSystemButtonAreaCallback([item](const QSize &) {
+            return QRectF(item->mapToScene(QPointF(0, 0)), item->size()).toRect(); //
+        });
     }
 
     void SystemButtonAreaItemHandler::updateSystemButtonArea() {
-        ctx->setSystemButtonArea(QRectF(item->mapToScene(QPointF(0, 0)), item->size()).toRect());
+        ctx->virtual_hook(AbstractWindowContext::SystemButtonAreaChangedHook, nullptr);
     }
 
     QQuickItem *QuickWindowAgent::systemButtonArea() const {
@@ -48,10 +51,21 @@
         d->systemButtonAreaItem = item;
         if (!item) {
             d->systemButtonAreaItemHandler.reset();
-            ctx->setSystemButtonArea({});
+            ctx->setSystemButtonAreaCallback({});
             return;
         }
         d->systemButtonAreaItemHandler = std::make_unique<SystemButtonAreaItemHandler>(item, ctx);
     }
 
+    ScreenRectCallback QuickWindowAgent::systemButtonAreaCallback() const {
+        Q_D(const QuickWindowAgent);
+        return d->systemButtonAreaItem ? nullptr : d->context->systemButtonAreaCallback();
+    }
+
+    void QuickWindowAgent::setSystemButtonAreaCallback(const ScreenRectCallback &callback) {
+        Q_D(QuickWindowAgent);
+        setSystemButtonArea(nullptr);
+        d->context->setSystemButtonAreaCallback(callback);
+    }
+
 }

--
Gitblit v1.9.1