From 1d95d5aa157d834f18ddb00065ff1ee48782ce82 Mon Sep 17 00:00:00 2001 From: Tobias Fella Date: Sun, 5 Nov 2023 14:35:28 +0100 Subject: [PATCH] Fix Runner and MatrixImageProvider singletons --- src/main.cpp | 6 +++--- src/matriximageprovider.h | 8 ++++++++ src/runner.h | 8 +++++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 8737f6663..2e1a718a5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -223,7 +223,7 @@ int main(int argc, char *argv[]) }); } - engine.addImageProvider(QLatin1String("mxc"), new MatrixImageProvider); + engine.addImageProvider(QLatin1String("mxc"), MatrixImageProvider::create(&engine, &engine)); engine.addImageProvider(QLatin1String("blurhash"), new BlurhashImageProvider); engine.load(QUrl(QStringLiteral("qrc:/org/kde/neochat/qml/main.qml"))); @@ -236,8 +236,8 @@ int main(int argc, char *argv[]) } #ifdef HAVE_RUNNER - Runner runner; - QDBusConnection::sessionBus().registerObject("/RoomRunner"_ls, &runner, QDBusConnection::ExportScriptableContents); + auto runner = Runner::create(&engine, &engine); + QDBusConnection::sessionBus().registerObject("/RoomRunner"_ls, runner, QDBusConnection::ExportScriptableContents); #endif QWindow *window = windowFromEngine(&engine); diff --git a/src/matriximageprovider.h b/src/matriximageprovider.h index 20074eaa0..dd5aa0d1a 100644 --- a/src/matriximageprovider.h +++ b/src/matriximageprovider.h @@ -60,6 +60,13 @@ class MatrixImageProvider : public QQuickAsyncImageProvider Q_PROPERTY(NeoChatConnection *connection MEMBER m_connection) public: + static MatrixImageProvider *create(QQmlEngine *engine, QJSEngine *) + { + static MatrixImageProvider instance; + engine->setObjectOwnership(&instance, QQmlEngine::CppOwnership); + return &instance; + } + /** * @brief Return a job to provide the image with the given ID. * @@ -69,4 +76,5 @@ public: private: NeoChatConnection *m_connection = nullptr; + MatrixImageProvider() = default; }; diff --git a/src/runner.h b/src/runner.h index 5bf71c9c9..2821a281a 100644 --- a/src/runner.h +++ b/src/runner.h @@ -170,7 +170,12 @@ class Runner : public QObject, protected QDBusContext Q_PROPERTY(RoomListModel *roomListModel READ roomListModel WRITE setRoomListModel NOTIFY roomListModelChanged) public: - Runner(); + static Runner *create(QQmlEngine *engine, QJSEngine *) + { + static Runner instance; + engine->setObjectOwnership(&instance, QQmlEngine::CppOwnership); + return &instance; + } /** * @brief Return a list of KRunner actions. @@ -200,4 +205,5 @@ private: SortFilterRoomListModel m_model; RoomListModel m_sourceModel; + Runner(); };