on xenial help sign in
set explicit object ownership
684a6d3Nick Dedekind
plugins/Unity/Indicators/unitymenumodelcache.cpp+4−2
@@ -19,7 +19,8 @@
19
19
20#include "unitymenumodelcache.h"
20#include "unitymenumodelcache.h"
21#include <unitymenumodel.h>
21#include <unitymenumodel.h>
22+
22−#include <QDebug>
23+#include <QQmlEngine>
23
24
24UnityMenuModelCache* UnityMenuModelCache::theCache = nullptr;
25UnityMenuModelCache* UnityMenuModelCache::theCache = nullptr;
25
26
@@ -45,13 +46,14 @@ QSharedPointer<UnityMenuModel> UnityMenuModelCache::model(const QByteArray& bus,
45 return m_registry[path];
46 return m_registry[path];
46
47
47 UnityMenuModel* model = new UnityMenuModel;
48 UnityMenuModel* model = new UnityMenuModel;
49+ QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership);
50+
48 QSharedPointer<UnityMenuModel> menuModel(model);
51 QSharedPointer<UnityMenuModel> menuModel(model);
49 connect(model, &QObject::destroyed, this, [this] {
52 connect(model, &QObject::destroyed, this, [this] {
50 QMutableHashIterator<QByteArray, QWeakPointer<UnityMenuModel>> iter(m_registry);
53 QMutableHashIterator<QByteArray, QWeakPointer<UnityMenuModel>> iter(m_registry);
51 while(iter.hasNext()) {
54 while(iter.hasNext()) {
52 auto keyVal = iter.next();
55 auto keyVal = iter.next();
53 if (keyVal.value().toStrongRef().isNull()) {
56 if (keyVal.value().toStrongRef().isNull()) {
54− qDebug() << "BAH: destroyed model! " << keyVal.key();
55 iter.remove();
57 iter.remove();
56 }
58 }
57 }
59 }