SineStriker
2023-12-18 187f82bb4065589fa7fba5f6fa9bd51113357a2c
src/core/contexts/cocoawindowcontext.mm
@@ -207,15 +207,6 @@
        return [nsview window];
    }
    static inline void cleanupProxy() {
        if (g_proxyList()->isEmpty()) {
            return;
        }
        const auto &data = *g_proxyList();
        qDeleteAll(data);
        g_proxyList()->clear();
    }
    static inline NSWindowProxy *ensureWindowProxy(const WId windowId) {
        auto it = g_proxyList()->find(windowId);
        if (it == g_proxyList()->end()) {
@@ -223,12 +214,13 @@
            const auto proxy = new NSWindowProxy(nswindow);
            it = g_proxyList()->insert(windowId, proxy);
        }
        static bool cleanerInstalled = false;
        if (!cleanerInstalled) {
            cleanerInstalled = true;
            qAddPostRoutine(cleanupProxy);
        }
        return it.value();
    }
    static inline void releaseWindowProxy(const WId windowId) {
        if (const auto proxy = g_proxyList()->take(windowId)) {
            delete proxy;
        }
    }
    class CocoaWindowEventFilter : public QObject {
@@ -369,7 +361,7 @@
    }
    CocoaWindowContext::~CocoaWindowContext() {
        // TODO: deref something?
        releaseWindowProxy(windowId);
    }
    QString CocoaWindowContext::key() const {
@@ -390,11 +382,13 @@
        AbstractWindowContext::virtual_hook(id, data);
    }
    void CocoaWindowContext::winIdChanged(QWindow *oldWindow, bool destroyed) {
    void CocoaWindowContext::winIdChanged(QWindow *oldWindow) {
        if (windowId) {
            releaseWindowProxy(windowId);
        }
        windowId = m_windowHandle->winId();
        ensureWindowProxy(windowId)->setSystemTitleBarVisible(false);
        cocoaWindowEventFilter = std::make_unique<CocoaWindowEventFilter>(this, this);
        return true;
    }
}