Sine Striker
2023-12-27 8a0b7831e988a347603e6abb4e8294010ab9b0e0
src/widgets/widgetwindowagent_mac.cpp
@@ -15,17 +15,19 @@
    protected:
        bool eventFilter(QObject *obj, QEvent *event) override {
            Q_UNUSED(obj)
            switch (event->type()) {
                case QEvent::Move:
                case QEvent::Resize: {
                    ctx->setSystemButtonArea(widget->geometry());
                    QRect rect(widget->mapTo(widget->window(), {}), widget->size());
                    ctx->setSystemButtonArea(rect);
                    break;
                }
                default:
                    break;
            }
            return QObject::eventFilter(obj, event);
            return false;
        }
    protected:
@@ -33,21 +35,29 @@
        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);
        auto ctx = d->context.get();
        d->systemButtonAreaWidget = widget;
        if (!widget) {
            systemButtonAreaWidgetEventFilter.reset();
            d->context->setSystemButtonArea({});
            d->systemButtonAreaWidgetEventFilter.reset();
            ctx->setSystemButtonArea({});
            return;
        }
        systemButtonAreaWidgetEventFilter =
            std::make_unique<SystemButtonAreaWidgetEventFilter>(widget, d->context);
        d->systemButtonAreaWidgetEventFilter =
            std::make_unique<SystemButtonAreaWidgetEventFilter>(widget, ctx);
    }
}