@@ -20,6 +20,8 @@
20#include "unitymenumodelcache.h"
20#include "unitymenumodelcache.h"
21#include <unitymenumodel.h>
21#include <unitymenumodel.h>
23UnityMenuModelCache::UnityMenuModelCache(QObject* parent)
25UnityMenuModelCache::UnityMenuModelCache(QObject* parent)
24 : QObject(parent)
26 : QObject(parent)
@@ -27,9 +29,9 @@ UnityMenuModelCache::UnityMenuModelCache(QObject* parent)
28UnityMenuModelCache::~UnityMenuModelCache()
30UnityMenuModelCache::~UnityMenuModelCache()
32+ qDeleteAll(m_menuModels);
33UnityMenuModel* UnityMenuModelCache::model(const QString& path) const
35UnityMenuModel* UnityMenuModelCache::model(const QString& path) const
35 return m_menuModels.value(path, NULL);
37 return m_menuModels.value(path, NULL);
@@ -37,6 +39,26 @@ UnityMenuModel* UnityMenuModelCache::model(const QString& path) const
38void UnityMenuModelCache::registerModel(const QString& path, UnityMenuModel* menuModel)
40void UnityMenuModelCache::registerModel(const QString& path, UnityMenuModel* menuModel)
42+ QQmlEngine::setObjectOwnership(menuModel, QQmlEngine::CppOwnership);
40 menuModel->setParent(this);
43 menuModel->setParent(this);
41 m_menuModels[path] = menuModel;
44 m_menuModels[path] = menuModel;
47+void UnityMenuModelCache::ref(UnityMenuModel* menuModel)
49+ m_refs[menuModel] = m_refs.value(menuModel, 0) + 1;
52+void UnityMenuModelCache::deref(UnityMenuModel* menuModel)
54+ if (m_refs.contains(menuModel)) {
55+ if (m_refs[menuModel]-- == 0) {
56+ m_refs.remove(menuModel);
57+ QList<QString> keys = m_menuModels.keys(menuModel);
58+ Q_FOREACH(const QString& key, keys) {
59+ m_menuModels.remove(key);