From 9dcea027f16c4ce5852da3dfc8aca284c582bd7d Mon Sep 17 00:00:00 2001
From: sola.lu <sola.lu.greentest.com.cn>
Date: 周五, 06 6月 2025 18:19:18 +0800
Subject: [PATCH] 1.注释掉custom margin,解决程序放大后,遮盖窗口底部内容的问题。

---
 src/widgets/widgetwindowagent_mac.cpp |   49 ++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 46 insertions(+), 3 deletions(-)

diff --git a/src/widgets/widgetwindowagent_mac.cpp b/src/widgets/widgetwindowagent_mac.cpp
index 912b03f..17156e4 100644
--- a/src/widgets/widgetwindowagent_mac.cpp
+++ b/src/widgets/widgetwindowagent_mac.cpp
@@ -1,8 +1,16 @@
+// Copyright (C) 2023-2024 Stdware Collections (https://www.github.com/stdware)
+// Copyright (C) 2021-2023 wangwenx190 (Yuhang Zhao)
+// SPDX-License-Identifier: Apache-2.0
+
 #include "widgetwindowagent_p.h"
 
 #include <QtGui/QtEvents>
 
 namespace QWK {
+
+    static inline QRect getWidgetSceneRect(QWidget *widget) {
+        return {widget->mapTo(widget->window(), QPoint()), widget->size()};
+    }
 
     class SystemButtonAreaWidgetEventFilter : public QObject {
     public:
@@ -10,8 +18,11 @@
                                           QObject *parent = nullptr)
             : QObject(parent), widget(widget), ctx(ctx) {
             widget->installEventFilter(this);
+            ctx->setSystemButtonAreaCallback([widget](const QSize &) {
+                return getWidgetSceneRect(widget); //
+            });
         }
-        ~SystemButtonAreaWidgetEventFilter() = default;
+        ~SystemButtonAreaWidgetEventFilter() override = default;
 
     protected:
         bool eventFilter(QObject *obj, QEvent *event) override {
@@ -19,7 +30,7 @@
             switch (event->type()) {
                 case QEvent::Move:
                 case QEvent::Resize: {
-                    ctx->setSystemButtonArea(widget->geometry());
+                    ctx->virtual_hook(AbstractWindowContext::SystemButtonAreaChangedHook, nullptr);
                     break;
                 }
 
@@ -34,22 +45,54 @@
         AbstractWindowContext *ctx;
     };
 
+    /*!
+        Returns the widget that acts as the system button area.
+    */
     QWidget *WidgetWindowAgent::systemButtonArea() const {
         Q_D(const WidgetWindowAgent);
         return d->systemButtonAreaWidget;
     }
 
+    /*!
+        Sets the widget that acts as the system button area. The system button will be centered in
+        its area, it is recommended to place the widget in a layout and set a fixed size policy.
+
+        The system button will be visible in the system title bar area.
+    */
     void WidgetWindowAgent::setSystemButtonArea(QWidget *widget) {
         Q_D(WidgetWindowAgent);
+        if (d->systemButtonAreaWidget == widget)
+            return;
+
         auto ctx = d->context.get();
         d->systemButtonAreaWidget = widget;
         if (!widget) {
+            d->context->setSystemButtonAreaCallback({});
             d->systemButtonAreaWidgetEventFilter.reset();
-            ctx->setSystemButtonArea({});
             return;
         }
         d->systemButtonAreaWidgetEventFilter =
             std::make_unique<SystemButtonAreaWidgetEventFilter>(widget, ctx);
     }
 
+    /*!
+        Returns the the system button area callback.
+    */
+    ScreenRectCallback WidgetWindowAgent::systemButtonAreaCallback() const {
+        Q_D(const WidgetWindowAgent);
+        return d->systemButtonAreaWidget ? nullptr : d->context->systemButtonAreaCallback();
+    }
+
+    /*!
+        Sets the the system button area callback, the \c size of the callback is the native title
+        bar size.
+        
+        The system button position will be updated when the window resizes.
+    */
+    void WidgetWindowAgent::setSystemButtonAreaCallback(const ScreenRectCallback &callback) {
+        Q_D(WidgetWindowAgent);
+        setSystemButtonArea(nullptr);
+        d->context->setSystemButtonAreaCallback(callback);
+    }
+
 }
\ No newline at end of file

--
Gitblit v1.9.1