SineStriker
2023-12-20 3871bfc5d3aff45e498fa2944c27e6eb5d146c8e
src/core/contexts/abstractwindowcontext.cpp
@@ -18,10 +18,7 @@
        }
        m_host = host;
        m_delegate.reset(delegate);
        m_windowHandle = m_delegate->hostWindow(m_host);
        if (m_windowHandle) {
            winIdChanged(nullptr);
        }
        setEnabled(true);
    }
    void AbstractWindowContext::setWindowAttribute(const QString &key, const QVariant &var) {
@@ -31,12 +28,12 @@
        auto newVar = var;
        auto oldVar = it.value();
        void *a[] = {
        void *args[] = {
            &const_cast<QString &>(key),
            &newVar,
            &oldVar,
        };
        virtual_hook(WindowAttributeChangedHook, a);
        virtual_hook(WindowAttributeChangedHook, args);
    }
    bool AbstractWindowContext::setHitTestVisible(const QObject *obj, bool visible) {
@@ -193,11 +190,39 @@
    }
    void AbstractWindowContext::notifyWinIdChange() {
        if (!m_internalEnabled)
            return;
        auto oldWindow = m_windowHandle;
        m_windowHandle = m_delegate->window(m_host);
        if (oldWindow == m_windowHandle)
            return;
        winIdChanged(oldWindow);
        auto isDestroyed = oldWindow && m_windowHandleCache.isNull();
        m_windowHandle = m_delegate->window(m_host);
        m_windowHandleCache = m_windowHandle;
        winIdChanged(oldWindow, isDestroyed);
    }
    void AbstractWindowContext::setEnabled(bool enabled) {
        if (enabled == m_internalEnabled)
            return;
        m_internalEnabled = enabled;
        if (enabled) {
            m_windowHandle = m_delegate->window(m_host);
            m_windowHandleCache = m_windowHandle;
            if (m_windowHandle) {
                winIdChanged(nullptr, false);
            }
            return;
        }
        if (!m_windowHandle)
            return;
        auto oldWindow = m_windowHandle;
        m_windowHandle = nullptr;
        m_windowHandleCache.clear();
        winIdChanged(oldWindow, false);
    }
}