| | |
| | | |
| | | namespace QWK { |
| | | |
| | | WidgetWindowAgentPrivate::WidgetWindowAgentPrivate() { |
| | | } |
| | | class WidgetWinIdChangeEventFilter : public QObject { |
| | | public: |
| | | explicit WidgetWinIdChangeEventFilter(QWidget *widget, AbstractWindowContext *ctx) |
| | | : QObject(ctx), widget(widget), ctx(ctx) { |
| | | widget->installEventFilter(this); |
| | | } |
| | | |
| | | WidgetWindowAgentPrivate::~WidgetWindowAgentPrivate() { |
| | | } |
| | | protected: |
| | | bool eventFilter(QObject *obj, QEvent *event) override { |
| | | Q_UNUSED(obj) |
| | | if (event->type() == QEvent::WinIdChange) { |
| | | ctx->notifyWinIdChange(); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | protected: |
| | | QWidget *widget; |
| | | AbstractWindowContext *ctx; |
| | | }; |
| | | |
| | | WidgetWindowAgentPrivate::WidgetWindowAgentPrivate() = default; |
| | | |
| | | WidgetWindowAgentPrivate::~WidgetWindowAgentPrivate() = default; |
| | | |
| | | void WidgetWindowAgentPrivate::init() { |
| | | } |
| | |
| | | : WidgetWindowAgent(*new WidgetWindowAgentPrivate(), parent) { |
| | | } |
| | | |
| | | WidgetWindowAgent::~WidgetWindowAgent() { |
| | | } |
| | | WidgetWindowAgent::~WidgetWindowAgent() = default; |
| | | |
| | | bool WidgetWindowAgent::setup(QWidget *w) { |
| | | Q_ASSERT(w); |
| | |
| | | w->setAttribute(Qt::WA_DontCreateNativeAncestors); |
| | | w->setAttribute(Qt::WA_NativeWindow); |
| | | |
| | | if (!d->setup(w, new WidgetItemDelegate())) { |
| | | return false; |
| | | } |
| | | d->setup(w, new WidgetItemDelegate()); |
| | | d->hostWidget = w; |
| | | |
| | | #ifdef Q_OS_WINDOWS |
| | | d->setupWindows10BorderWorkaround(); |
| | | #endif |
| | | std::ignore = new WidgetWinIdChangeEventFilter(w, d->context.get()); |
| | | |
| | | return true; |
| | | } |
| | | |
| | |
| | | void WidgetWindowAgent::setHitTestVisible(const QWidget *w, bool visible) { |
| | | Q_D(WidgetWindowAgent); |
| | | d->context->setHitTestVisible(w, visible); |
| | | } |
| | | |
| | | void WidgetWindowAgent::setHitTestVisible(const QRect &rect, bool visible) { |
| | | Q_D(WidgetWindowAgent); |
| | | d->context->setHitTestVisible(rect, visible); |
| | | } |
| | | |
| | | WidgetWindowAgent::WidgetWindowAgent(WidgetWindowAgentPrivate &d, QObject *parent) |