Sine Striker
2023-12-25 29901fc2a97eedd3c914f807d1819c9ea7e69973
src/core/contexts/abstractwindowcontext.cpp
@@ -9,6 +9,8 @@
namespace QWK {
    namespace {
    class WinIdChangeEventFilter : public QObject {
    public:
        explicit WinIdChangeEventFilter(QObject *widget, AbstractWindowContext *ctx,
@@ -30,6 +32,26 @@
        AbstractWindowContext *ctx;
    };
        class WindowEventFilter : public QObject {
        public:
            explicit WindowEventFilter(QWindow *window, AbstractWindowContext *ctx,
                                       QObject *parent = nullptr)
                : QObject(parent), ctx(ctx), window(window) {
                window->installEventFilter(this);
            }
        protected:
            bool eventFilter(QObject *obj, QEvent *event) override {
                return ctx->sharedDispatch(obj, event);
            }
        protected:
            AbstractWindowContext *ctx;
            QWindow *window;
        };
    }
    AbstractWindowContext::AbstractWindowContext() = default;
    AbstractWindowContext::~AbstractWindowContext() = default;
@@ -45,6 +67,7 @@
        m_windowHandle = m_delegate->hostWindow(m_host);
        if (m_windowHandle) {
            winIdChanged();
            m_windowEventFilter = std::make_unique<WindowEventFilter>(m_windowHandle, this);
        }
    }
@@ -245,9 +268,11 @@
        m_windowHandle = m_delegate->hostWindow(m_host);
        if (oldWindow == m_windowHandle)
            return;
        m_windowEventFilter.reset();
        winIdChanged();
        if (m_windowHandle) {
            m_windowEventFilter = std::make_unique<WindowEventFilter>(m_windowHandle, this);
            // Refresh window attributes
            auto attributes = m_windowAttributes;
            m_windowAttributes.clear();