| | |
| | | |
| | | namespace QWK { |
| | | |
| | | static inline QRect getWidgetSceneRect(QWidget *widget) { |
| | | return {widget->mapTo(widget->window(), {}), widget->size()}; |
| | | } |
| | | |
| | | class SystemButtonAreaWidgetEventFilter : public QObject { |
| | | public: |
| | | SystemButtonAreaWidgetEventFilter(QWidget *widget, AbstractWindowContext *ctx, |
| | |
| | | switch (event->type()) { |
| | | case QEvent::Move: |
| | | case QEvent::Resize: { |
| | | QRect rect(widget->mapTo(widget->window(), {}), widget->size()); |
| | | ctx->setSystemButtonArea(rect); |
| | | ctx->setSystemButtonArea(getWidgetSceneRect(widget)); |
| | | break; |
| | | } |
| | | |
| | |
| | | */ |
| | | void WidgetWindowAgent::setSystemButtonArea(QWidget *widget) { |
| | | Q_D(WidgetWindowAgent); |
| | | if (d->systemButtonAreaWidget == widget) |
| | | return; |
| | | |
| | | auto ctx = d->context.get(); |
| | | d->systemButtonAreaWidget = widget; |
| | | if (!widget) { |
| | |
| | | } |
| | | d->systemButtonAreaWidgetEventFilter = |
| | | std::make_unique<SystemButtonAreaWidgetEventFilter>(widget, ctx); |
| | | ctx->setSystemButtonArea(getWidgetSceneRect(widget)); |
| | | } |
| | | |
| | | } |