Yuhang Zhao
2023-12-19 78f31c67d71ee743f022dd6f5930abae6f6d54f9
src/widgets/widgetwindowagent.cpp
@@ -9,11 +9,30 @@
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() {
    }
@@ -22,8 +41,7 @@
        : WidgetWindowAgent(*new WidgetWindowAgentPrivate(), parent) {
    }
    WidgetWindowAgent::~WidgetWindowAgent() {
    }
    WidgetWindowAgent::~WidgetWindowAgent() = default;
    bool WidgetWindowAgent::setup(QWidget *w) {
        Q_ASSERT(w);
@@ -39,14 +57,14 @@
        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;
    }
@@ -84,11 +102,6 @@
    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)