From 8b72eabae325c34d8eab1544203993015cc91741 Mon Sep 17 00:00:00 2001
From: Sine Striker <trueful@163.com>
Date: 周一, 18 12月 2023 00:54:51 +0800
Subject: [PATCH] Add win32 winIdChange workaround

---
 src/core/windowagentbase.cpp |   35 +++++++++++++++++++++--------------
 1 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/src/core/windowagentbase.cpp b/src/core/windowagentbase.cpp
index 94d1fca..d2b9e1e 100644
--- a/src/core/windowagentbase.cpp
+++ b/src/core/windowagentbase.cpp
@@ -1,10 +1,14 @@
 #include "windowagentbase.h"
 #include "windowagentbase_p.h"
 
+#include <QWKCore/qwkconfig.h>
+
 #include "qwkglobal_p.h"
 
-#ifdef Q_OS_WINDOWS
+#if defined(Q_OS_WINDOWS) && !QWINDOWKIT_CONFIG(FORCE_QT_WINDOW_CONTEXT)
 #  include "win32windowcontext_p.h"
+#elif defined(Q_OS_MAC) && !QWINDOWKIT_CONFIG(FORCE_QT_WINDOW_CONTEXT)
+#  include "cocoawindowcontext_p.h"
 #else
 #  include "qtwindowcontext_p.h"
 #endif
@@ -12,6 +16,9 @@
 Q_LOGGING_CATEGORY(qWindowKitLog, "qwindowkit")
 
 namespace QWK {
+
+    WindowAgentBasePrivate::WindowContextFactoryMethod
+        WindowAgentBasePrivate::windowContextFactoryMethod = nullptr;
 
     WindowAgentBasePrivate::WindowAgentBasePrivate() : q_ptr(nullptr), context(nullptr) {
     }
@@ -22,23 +29,23 @@
     }
 
     AbstractWindowContext *WindowAgentBasePrivate::createContext() const {
-        return
-#ifdef Q_OS_WINDOWS
-            new Win32WindowContext()
+        if (windowContextFactoryMethod) {
+            return windowContextFactoryMethod();
+        }
+
+#if defined(Q_OS_WINDOWS) && !QWINDOWKIT_CONFIG(FORCE_QT_WINDOW_CONTEXT)
+        return new Win32WindowContext();
+#elif defined(Q_OS_MAC) && !QWINDOWKIT_CONFIG(FORCE_QT_WINDOW_CONTEXT)
+        return new CocoaWindowContext();
 #else
-            new QtWindowContext()
+        return new QtWindowContext();
 #endif
-                ;
     }
 
-
-    bool WindowAgentBasePrivate::setup(QObject *host, WindowItemDelegate *delegate) {
-        std::unique_ptr<AbstractWindowContext> ctx(createContext());
-        if (!ctx->setup(host, delegate)) {
-            return false;
-        }
-        context = std::move(ctx);
-        return true;
+    void WindowAgentBasePrivate::setup(QObject *host, WindowItemDelegate *delegate) {
+        auto ctx = createContext();
+        ctx->setup(host, delegate);
+        context.reset(ctx);
     }
 
     WindowAgentBase::~WindowAgentBase() = default;

--
Gitblit v1.9.1