From bbd0f1932fcf7a730d8ab9410e158f2b1035bc23 Mon Sep 17 00:00:00 2001
From: Sine Striker <trueful@163.com>
Date: 周三, 13 12月 2023 18:53:02 +0800
Subject: [PATCH] Add cocoa

---
 src/core/windowagentbase.cpp |   26 +++++++++++++++++---------
 1 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/src/core/windowagentbase.cpp b/src/core/windowagentbase.cpp
index 94d1fca..a796b3e 100644
--- a/src/core/windowagentbase.cpp
+++ b/src/core/windowagentbase.cpp
@@ -3,8 +3,10 @@
 
 #include "qwkglobal_p.h"
 
-#ifdef Q_OS_WINDOWS
+#if defined(Q_OS_WINDOWS) && !defined(QWINDOWKIT_FORCE_QT_WINDOW_CONTEXT)
 #  include "win32windowcontext_p.h"
+#elif defined(Q_OS_MAC) && !defined(QWINDOWKIT_FORCE_QT_WINDOW_CONTEXT)
+#  include "cocoawindowcontext_p.h"
 #else
 #  include "qtwindowcontext_p.h"
 #endif
@@ -12,6 +14,9 @@
 Q_LOGGING_CATEGORY(qWindowKitLog, "qwindowkit")
 
 namespace QWK {
+
+    WindowAgentBasePrivate::WindowContextFactoryMethod
+        WindowAgentBasePrivate::windowContextFactoryMethod = nullptr;
 
     WindowAgentBasePrivate::WindowAgentBasePrivate() : q_ptr(nullptr), context(nullptr) {
     }
@@ -22,15 +27,18 @@
     }
 
     AbstractWindowContext *WindowAgentBasePrivate::createContext() const {
-        return
-#ifdef Q_OS_WINDOWS
-            new Win32WindowContext()
-#else
-            new QtWindowContext()
-#endif
-                ;
-    }
+        if (windowContextFactoryMethod) {
+            return windowContextFactoryMethod();
+        }
 
+#if defined(Q_OS_WINDOWS) && !defined(QWINDOWKIT_FORCE_QT_WINDOW_CONTEXT)
+        return new Win32WindowContext();
+#elif defined(Q_OS_MAC) && !defined(QWINDOWKIT_FORCE_QT_WINDOW_CONTEXT)
+        return new CocoaWindowContext();
+#else
+        return new QtWindowContext();
+#endif
+    }
 
     bool WindowAgentBasePrivate::setup(QObject *host, WindowItemDelegate *delegate) {
         std::unique_ptr<AbstractWindowContext> ctx(createContext());

--
Gitblit v1.9.1