Yuhang Zhao
2023-12-18 56c4ef0a85abb92a64bb90d86526f2218835e282
src/core/contexts/cocoawindowcontext.mm
@@ -207,26 +207,12 @@
        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()) {
            NSWindow *nswindow = mac_getNSWindow(windowId);
            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();
    }
@@ -259,7 +245,8 @@
    CocoaWindowEventFilter::~CocoaWindowEventFilter() = default;
    bool CocoaWindowEventFilter::eventFilter(QObject *object, QEvent *event) {
    bool CocoaWindowEventFilter::eventFilter(QObject *obj, QEvent *event) {
        Q_UNUSED(obj)
        auto type = event->type();
        if (type < QEvent::MouseButtonPress || type > QEvent::MouseMove) {
            return false;
@@ -368,7 +355,9 @@
    }
    CocoaWindowContext::~CocoaWindowContext() {
        // TODO: deref something?
        if (const auto proxy = g_proxyList()->take(windowId)) {
            delete proxy;
        }
    }
    QString CocoaWindowContext::key() const {
@@ -389,10 +378,10 @@
        AbstractWindowContext::virtual_hook(id, data);
    }
    bool CocoaWindowContext::setupHost() {
    void CocoaWindowContext::winIdChanged(QWindow *oldWindow, bool destroyed) {
        windowId = m_windowHandle->winId();
        ensureWindowProxy(windowId)->setSystemTitleBarVisible(false);
        std::ignore = new CocoaWindowEventFilter(this, this);
        cocoaWindowEventFilter = std::make_unique<CocoaWindowEventFilter>(this, this);
        return true;
    }