@@ -18,43 +18,51 @@
1818 */
1919
2020import QtQuick 2.0
21−import QMenuModel 0.1 as QMenuModel
21+import QMenuModel 0.1
2222import Unity.Indicators 0.1 as Indicators
2323
2424// Make sure we don't duplicate models.
2525Item {
2626 id: cachedModel
27− property string busName: ""
28− property string actionsObjectPath: ""
29− property string menuObjectPath: ""
30−
27+ property string busName
28+ property string actionsObjectPath
29+ property string menuObjectPath
3130 readonly property bool ready: busName!=="" && actionsObjectPath!=="" && menuObjectPath!==""
3231
33− property QtObject model: {
34− if (!ready) {
35− return null;
32+ property UnityMenuModel model: {
33+ if (!ready) return null;
34+
35+ var newModel = Indicators.UnityMenuModelCache.model(menuObjectPath);
36+ if (!newModel) {
37+ newModel = modelComponent.createObject(null,
38+ {
39+ "busName": cachedModel.busName,
40+ "menuObjectPath": cachedModel.menuObjectPath,
41+ "actions": { "indicator": cachedModel.actionsObjectPath },
42+ });
43+ Indicators.UnityMenuModelCache.registerModel(newModel.menuObjectPath, newModel);
3644 }
45+ return newModel;
46+ }
47+
48+ QtObject {
49+ id: d
50+ property UnityMenuModel oldModel: null
51+ }
3752
38− var component = Indicators.UnityMenuModelCache.model(menuObjectPath);
39− if (!component) {
40− component = modelComponent.createObject(cachedModel);
41− return component;
53+ onModelChanged: {
54+ if (model !== d.oldModel) {
55+ if (d.oldModel) Indicators.UnityMenuModelCache.deref(d.oldModel);
56+ if (model) Indicators.UnityMenuModelCache.ref(model);
4257 }
43− return component;
58+ d.oldModel = model;
59+ }
60+ Component.onDestruction: {
61+ if (model) Indicators.UnityMenuModelCache.deref(model);
4462 }
4563
4664 Component {
4765 id: modelComponent
48−
49− QMenuModel.UnityMenuModel {
50− id: unityModel
51− busName: cachedModel.busName
52− actions: { "indicator": cachedModel.actionsObjectPath }
53− menuObjectPath: cachedModel.menuObjectPath
54−
55− Component.onCompleted: {
56− Indicators.UnityMenuModelCache.registerModel(cachedModel.menuObjectPath, unityModel);
57− }
58− }
66+ UnityMenuModel {}
5967 }
6068}