diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0347ee4e..e1e51a0d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -207,6 +207,7 @@ set(KDDW_QTQUICK_FRONTEND_SRCS qtquick/Window_qtquick.h qtquick/Platform_qtquick.cpp qtquick/Platform_qtquick.h + qtquick/Helpers.cpp qtquick/TestHelpers_qtquick.cpp qtquick/LayoutSaverInstantiator.cpp qtquick/LayoutSaverInstantiator.h diff --git a/src/Config.cpp b/src/Config.cpp index 653a43bb..a9f32e09 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -30,12 +30,6 @@ #include #include -#ifdef KDDOCKWIDGETS_QTQUICK -#include "private/quick/Helpers_p.h" -#include -#include -#endif - namespace KDDockWidgets { class Config::Private @@ -53,7 +47,6 @@ public: void fixFlags(); - QQmlEngine *m_qmlEngine = nullptr; DockWidgetFactoryFunc m_dockWidgetFactoryFunc = nullptr; MainWindowFactoryFunc m_mainWindowFactoryFunc = nullptr; TabbingAllowedFunc m_tabbingAllowedFunc = nullptr; @@ -65,9 +58,6 @@ public: qreal m_draggedWindowOpacity = Q_QNAN; int m_mdiPopupThreshold = 250; bool m_dropIndicatorsInhibited = false; -#ifdef KDDOCKWIDGETS_QTQUICK - QtQuickHelpers m_qquickHelpers; -#endif }; Config::Config() @@ -234,38 +224,6 @@ void Config::setInternalFlags(InternalFlags flags) d->m_internalFlags = flags; } -#ifdef KDDOCKWIDGETS_QTQUICK -void Config::setQmlEngine(QQmlEngine *qmlEngine) -{ - if (d->m_qmlEngine) { - qWarning() << Q_FUNC_INFO << "Already has QML engine"; - return; - } - - if (!qmlEngine) { - qWarning() << Q_FUNC_INFO << "Null QML engine"; - return; - } - - auto dr = DockRegistry::self(); // make sure our QML types are registered - QQmlContext *context = qmlEngine->rootContext(); - context->setContextProperty(QStringLiteral("_kddwHelpers"), &d->m_qquickHelpers); - context->setContextProperty(QStringLiteral("_kddwDockRegistry"), dr); - context->setContextProperty(QStringLiteral("_kddwDragController"), DragController::instance()); - context->setContextProperty(QStringLiteral("_kddw_widgetFactory"), d->m_frameworkWidgetFactory); - - d->m_qmlEngine = qmlEngine; -} - -QQmlEngine *Config::qmlEngine() const -{ - if (!d->m_qmlEngine) - qWarning() << "Please call KDDockWidgets::Config::self()->setQmlEngine(engine)"; - - return d->m_qmlEngine; -} -#endif - void Config::Private::fixFlags() { #if defined(Q_OS_WIN) diff --git a/src/Config.h b/src/Config.h index 7fc85427..2c8092bd 100644 --- a/src/Config.h +++ b/src/Config.h @@ -25,7 +25,6 @@ #include QT_BEGIN_NAMESPACE -class QQmlEngine; class QSize; QT_END_NAMESPACE @@ -316,12 +315,6 @@ public: void setMDIPopupThreshold(int); int mdiPopupThreshold() const; -#ifdef KDDOCKWIDGETS_QTQUICK - ///@brief Sets the QQmlEngine to use. Applicable only when using QtQuick. - void setQmlEngine(QQmlEngine *); - QQmlEngine *qmlEngine() const; -#endif - private: Q_DISABLE_COPY(Config) Config(); diff --git a/src/qtquick/Helpers.cpp b/src/qtquick/Helpers.cpp index 2dcb5474..7b62d9df 100644 --- a/src/qtquick/Helpers.cpp +++ b/src/qtquick/Helpers.cpp @@ -10,7 +10,6 @@ */ #include "Helpers_p.h" -#include "QWidgetAdapter.h" #include @@ -19,5 +18,5 @@ using namespace KDDockWidgets; qreal QtQuickHelpers::logicalDpiFactor(const QQuickItem *) const { return 1; // TODO: Support the actual dpi factor. - //return KDDockWidgets::logicalDpiFactor(item); + // return KDDockWidgets::logicalDpiFactor(item); } diff --git a/src/qtquick/Platform_qtquick.cpp b/src/qtquick/Platform_qtquick.cpp index 24e7663f..2736eb83 100644 --- a/src/qtquick/Platform_qtquick.cpp +++ b/src/qtquick/Platform_qtquick.cpp @@ -17,6 +17,9 @@ #include "Window_qtquick.h" #include "views/View_qtquick.h" #include "qtquick/Window_qtquick.h" +#include "private/DockRegistry_p.h" +#include "private/DragController_p.h" +#include "FrameworkWidgetFactory.h" #include #include @@ -25,10 +28,11 @@ #include #include #include +#include using namespace KDDockWidgets; -QQmlEngine *Platform_qtquick::m_qmlEngine = nullptr; +// QQmlEngine *Platform_qtquick::m_qmlEngine = nullptr; Platform_qtquick::Platform_qtquick() { @@ -106,3 +110,31 @@ QSize Platform_qtquick::screenSizeFor(View *view) const return {}; } + +QQmlEngine *Platform_qtquick::qmlEngine() const +{ + if (!m_qmlEngine) + qWarning() << "Please call KDDockWidgets::Platform_qtquick::self()->setQmlEngine(engine)"; + + return m_qmlEngine; +} + +void Platform_qtquick::setQmlEngine(QQmlEngine *qmlEngine) +{ + if (m_qmlEngine) { + qWarning() << Q_FUNC_INFO << "Already has QML engine"; + return; + } + + if (!qmlEngine) { + qWarning() << Q_FUNC_INFO << "Null QML engine"; + return; + } + + auto dr = DockRegistry::self(); // make sure our QML types are registered + QQmlContext *context = qmlEngine->rootContext(); + context->setContextProperty(QStringLiteral("_kddwHelpers"), &m_qquickHelpers); + context->setContextProperty(QStringLiteral("_kddwDockRegistry"), dr); + context->setContextProperty(QStringLiteral("_kddwDragController"), DragController::instance()); + context->setContextProperty(QStringLiteral("_kddw_widgetFactory"), Config::self().frameworkWidgetFactory()); +} diff --git a/src/qtquick/Platform_qtquick.h b/src/qtquick/Platform_qtquick.h index 5123e730..7de52a82 100644 --- a/src/qtquick/Platform_qtquick.h +++ b/src/qtquick/Platform_qtquick.h @@ -13,6 +13,7 @@ #include "KDDockWidgets.h" #include "qtcommon/Platform_qt.h" +#include "Helpers_p.h" class QQmlEngine; @@ -33,17 +34,24 @@ public: using Platform_qt::screenNumberFor; int screenNumberFor(View *) const override; QSize screenSizeFor(View *) const override; + void setQmlEngine(QQmlEngine *); + QQmlEngine *qmlEngine() const; #ifdef DOCKS_DEVELOPER_MODE explicit Platform_qtquick(int argc, char *argv[]); void tests_initPlatform_impl() override; void tests_deinitPlatform_impl() override; View *tests_createView(CreateViewOptions, View *parent = nullptr) override; - - static QQmlEngine *m_qmlEngine; #endif private: void init(); + QQmlEngine *m_qmlEngine = nullptr; + QtQuickHelpers m_qquickHelpers; }; +inline Platform_qtquick *plat() +{ + return static_cast(Platform::instance()); +} + } diff --git a/src/qtquick/TestHelpers_qtquick.cpp b/src/qtquick/TestHelpers_qtquick.cpp index ab122032..2bde62f5 100644 --- a/src/qtquick/TestHelpers_qtquick.cpp +++ b/src/qtquick/TestHelpers_qtquick.cpp @@ -57,7 +57,7 @@ void Platform_qtquick::tests_initPlatform_impl() Platform_qt::tests_initPlatform_impl(); QQuickStyle::setStyle(QStringLiteral("Material")); // so we don't load KDE plugins - m_qmlEngine = new QQmlEngine(); + plat()->setQmlEngine(new QQmlEngine()); } void Platform_qtquick::tests_deinitPlatform_impl()