Sine Striker
2023-12-28 a12bb8782bd02305466a29101a4c54d6ba9c6bfe
src/widgets/widgetwindowagent_mac.cpp
@@ -4,6 +4,10 @@
namespace QWK {
    static inline QRect getWidgetSceneRect(QWidget *widget) {
        return {widget->mapTo(widget->window(), QPoint()), widget->size()};
    }
    class SystemButtonAreaWidgetEventFilter : public QObject {
    public:
        SystemButtonAreaWidgetEventFilter(QWidget *widget, AbstractWindowContext *ctx,
@@ -15,17 +19,18 @@
    protected:
        bool eventFilter(QObject *obj, QEvent *event) override {
            Q_UNUSED(obj)
            switch (event->type()) {
                case QEvent::Move:
                case QEvent::Resize: {
                    ctx->setSystemButtonArea(widget->geometry());
                    ctx->setSystemButtonArea(getWidgetSceneRect(widget));
                    break;
                }
                default:
                    break;
            }
            return QObject::eventFilter(obj, event);
            return false;
        }
    protected:
@@ -33,13 +38,23 @@
        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.
    */
    void WidgetWindowAgent::setSystemButtonArea(QWidget *widget) {
        Q_D(WidgetWindowAgent);
        if (d->systemButtonAreaWidget == widget)
            return;
        auto ctx = d->context.get();
        d->systemButtonAreaWidget = widget;
        if (!widget) {
@@ -49,6 +64,7 @@
        }
        d->systemButtonAreaWidgetEventFilter =
            std::make_unique<SystemButtonAreaWidgetEventFilter>(widget, ctx);
        ctx->setSystemButtonArea(getWidgetSceneRect(widget));
    }
}