#include "widgetwindowagent_p.h" #include namespace QWK { class SystemButtonAreaWidgetEventFilter : public QObject { public: SystemButtonAreaWidgetEventFilter(QWidget *widget, AbstractWindowContext *ctx, QObject *parent = nullptr) : QObject(parent), widget(widget), ctx(ctx) { widget->installEventFilter(this); } ~SystemButtonAreaWidgetEventFilter() = default; protected: bool eventFilter(QObject *obj, QEvent *event) override { switch (event->type()) { case QEvent::Move: case QEvent::Resize: { ctx->setSystemButtonArea(widget->geometry()); break; } default: break; } return QObject::eventFilter(obj, event); } protected: QWidget *widget; AbstractWindowContext *ctx; }; QWidget *WidgetWindowAgent::systemButtonArea() const { Q_D(const WidgetWindowAgent); return d->systemButtonAreaWidget; } void WidgetWindowAgent::setSystemButtonArea(QWidget *widget) { Q_D(WidgetWindowAgent); auto ctx = d->context.get(); d->systemButtonAreaWidget = widget; if (!widget) { d->systemButtonAreaWidgetEventFilter.reset(); ctx->setSystemButtonArea({}); return; } d->systemButtonAreaWidgetEventFilter = std::make_unique(widget, ctx); } }