Yuhang Zhao
2023-12-18 56c4ef0a85abb92a64bb90d86526f2218835e282
src/core/contexts/cocoawindowcontext.mm
@@ -6,17 +6,6 @@
#include <QtGui/QGuiApplication>
namespace QWK {
    // ### FIXME FIXME FIXME
    // ### FIXME: Tell the user to call in the documentation, instead of automatically
    // calling it directly.
    // ### FIXME FIXME FIXME
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    static const struct QWK_Hook {
        QWK_Hook() {
            qputenv("QT_MAC_WANTS_LAYER", "1");
        }
    } g_hook{};
#endif
    struct NSWindowProxy {
        NSWindowProxy(NSWindow *macWindow) {
@@ -218,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();
    }
@@ -270,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;
@@ -379,7 +355,9 @@
    }
    CocoaWindowContext::~CocoaWindowContext() {
        // TODO: deref something?
        if (const auto proxy = g_proxyList()->take(windowId)) {
            delete proxy;
        }
    }
    QString CocoaWindowContext::key() const {
@@ -400,13 +378,10 @@
        AbstractWindowContext::virtual_hook(id, data);
    }
    bool CocoaWindowContext::setupHost() {
    void CocoaWindowContext::winIdChanged(QWindow *oldWindow, bool destroyed) {
        windowId = m_windowHandle->winId();
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
        m_windowHandle->setProperty("_q_mac_wantsLayer", 1);
#endif
        ensureWindowProxy(windowId)->setSystemTitleBarVisible(false);
        std::ignore = new CocoaWindowEventFilter(this, this);
        cocoaWindowEventFilter = std::make_unique<CocoaWindowEventFilter>(this, this);
        return true;
    }