6#include <QtGui/QtEvents>
10static inline QRect getWidgetSceneRect(QWidget *widget)
12 return {widget->mapTo(widget->window(), QPoint()), widget->size()};
15class SystemButtonAreaWidgetEventFilter :
public QObject
18 SystemButtonAreaWidgetEventFilter(QWidget *widget, WindowContext *
ctx, QObject *parent =
nullptr)
23 widget->installEventFilter(
this);
24 ctx->setSystemButtonAreaCallback([widget](
const QSize &) {
25 return getWidgetSceneRect(widget);
28 ~SystemButtonAreaWidgetEventFilter()
override =
default;
30 bool eventFilter(QObject *obj, QEvent *event)
override
33 switch (event->type()) {
35 case QEvent::Resize: {
36 ctx->virtual_hook(WindowContext::SystemButtonAreaChangedHook,
nullptr);
53QWidget *WindowAgentWidget::systemButtonArea()
const
56 return d->m_systemButtonAreaWidget;
65void WindowAgentWidget::setSystemButtonArea(QWidget *widget)
68 if (d->m_systemButtonAreaWidget == widget)
71 auto ctx = d->m_context.get();
72 d->m_systemButtonAreaWidget = widget;
74 d->m_context->setSystemButtonAreaCallback({});
75 d->m_systemButtonAreaWidgetEventFilter.reset();
78 d->m_systemButtonAreaWidgetEventFilter = std::make_unique<SystemButtonAreaWidgetEventFilter>(widget,
ctx);
87 return d->m_systemButtonAreaWidget ? nullptr : d->m_context->systemButtonAreaCallback();
99 setSystemButtonArea(
nullptr);
100 d->m_context->setSystemButtonAreaCallback(callback);
std::function< QRect(const QSize &)> ScreenRectCallback
#define QX_WINDOW_END_NAMESPACE
#define QX_WINDOW_BEGIN_NAMESPACE