on xenial help sign in
Only use the parser when needed.
bd301e7Nick Dedekind
plugins/Unity/Indicators/rootactionstate.cpp+6−7
@@ -37,10 +37,6 @@ RootActionState::RootActionState(QObject *parent)
37
37
38RootActionState::~RootActionState()
38RootActionState::~RootActionState()
39{
39{
40− if (m_menu) {
41− m_menu->disconnect(this);
42− m_menu->setActionStateParser(NULL);
43− }
44}
40}
45
41
46UnityMenuModel* RootActionState::menu() const
42UnityMenuModel* RootActionState::menu() const
@@ -53,7 +49,6 @@ void RootActionState::setMenu(UnityMenuModel* menu)
53 if (m_menu != menu) {
49 if (m_menu != menu) {
54 if (m_menu) {
50 if (m_menu) {
55 m_menu->disconnect(this);
51 m_menu->disconnect(this);
56− m_menu->setActionStateParser(NULL);
57 }
52 }
58 m_menu = menu;
53 m_menu = menu;
59
54
@@ -63,8 +58,6 @@ void RootActionState::setMenu(UnityMenuModel* menu)
63 connect(m_menu, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)), SLOT(onModelDataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)));
58 connect(m_menu, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)), SLOT(onModelDataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)));
64
59
65 connect(m_menu, SIGNAL(destroyed()), SLOT(reset()));
60 connect(m_menu, SIGNAL(destroyed()), SLOT(reset()));
66−
67− m_menu->setActionStateParser(this);
68 }
61 }
69 updateActionState();
62 updateActionState();
70 Q_EMIT menuChanged();
63 Q_EMIT menuChanged();
@@ -110,7 +103,13 @@ void RootActionState::reset() {
110void RootActionState::updateActionState()
103void RootActionState::updateActionState()
111{
104{
112 if (m_menu && m_menu->rowCount() > 0) {
105 if (m_menu && m_menu->rowCount() > 0) {
106+
107+ ActionStateParser* oldParser = m_menu->actionStateParser();
108+ m_menu->setActionStateParser(this);
109+
113 m_cachedState = m_menu->get(0, "actionState").toMap();
110 m_cachedState = m_menu->get(0, "actionState").toMap();
111+
112+ m_menu->setActionStateParser(oldParser);
114 } else {
113 } else {
115 m_cachedState.clear();
114 m_cachedState.clear();
116 }
115 }
tests/plugins/Unity/Indicators/rootactionstatetest.cpp+2−3
@@ -30,14 +30,13 @@ private Q_SLOTS:
30 void testDeleteRootActionState()
30 void testDeleteRootActionState()
31 {
31 {
32 UnityMenuModel* menuModel = new UnityMenuModel();
32 UnityMenuModel* menuModel = new UnityMenuModel();
33+ ActionStateParser* originalParser = menuModel->actionStateParser();
33 RootActionState* rootState = new RootActionState();
34 RootActionState* rootState = new RootActionState();
34
35
35 rootState->setMenu(menuModel);
36 rootState->setMenu(menuModel);
36
37
37− QCOMPARE(menuModel->actionStateParser(), rootState);
38 delete rootState;
38 delete rootState;
39− QVERIFY(menuModel->actionStateParser() == NULL);
39+ QCOMPARE(menuModel->actionStateParser(), originalParser);
40−
41 delete menuModel;
40 delete menuModel;
42 }
41 }
43
42