20 #include "unitymenumodelcache.h"
21 #include <unitymenumodel.h>
25 QPointer<UnityMenuModelCache> UnityMenuModelCache::theCache =
nullptr;
27 UnityMenuModelCache* UnityMenuModelCache::singleton()
29 if (theCache.isNull()) {
30 theCache =
new UnityMenuModelCache();
32 return theCache.data();
35 UnityMenuModelCache::UnityMenuModelCache(QObject* parent)
40 QSharedPointer<UnityMenuModel> UnityMenuModelCache::model(
const QByteArray& path)
42 if (m_registry.contains(path))
43 return m_registry[path];
45 UnityMenuModel* model =
new UnityMenuModel;
46 QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership);
48 QSharedPointer<UnityMenuModel> menuModel(model);
49 connect(model, &QObject::destroyed,
this, [
this] {
50 QMutableHashIterator<QByteArray, QWeakPointer<UnityMenuModel>> iter(m_registry);
51 while(iter.hasNext()) {
52 auto keyVal = iter.next();
53 if (keyVal.value().isNull()) {
59 m_registry[path] = menuModel.toWeakRef();
61 menuModel->setMenuObjectPath(path);
65 bool UnityMenuModelCache::contains(
const QByteArray& path)
67 return m_registry.contains(path);