~ci-train-bot/hud/hud-ubuntu-zesty-landing-022

« back to all changes in this revision

Viewing changes to service/DBusMenuCollector.cpp

  • Committer: CI bot
  • Author(s): Pete Woods
  • Date: 2014-03-26 09:36:14 UTC
  • mfrom: (386.1.3 trunk)
  • Revision ID: ps-jenkins@lists.canonical.com-20140326093614-t1fs0vuhk8vpv387
Add safety valve for DBusMenuCollector that also reports the offending application Fixes: 1280372

Show diffs side-by-side

added added

removed removed

Lines of Context:
89
89
        return hash;
90
90
}
91
91
 
92
 
void DBusMenuCollector::openMenu(QMenu *menu) {
 
92
void DBusMenuCollector::openMenu(QMenu *menu, unsigned int &limit) {
93
93
        if (!menu) {
94
94
                return;
95
95
        }
96
96
 
 
97
        if (limit == 0) {
 
98
                qWarning() << "Hit DBusMenu safety valve for menu at" << m_service
 
99
                                << m_path.path();
 
100
                return;
 
101
        }
 
102
 
97
103
        menu->aboutToShow();
98
104
 
99
105
        for (int i(0); m_menuImporter && i < menu->actions().size(); ++i) {
107
113
 
108
114
                QMenu *child(action->menu());
109
115
                if (child) {
110
 
                        openMenu(child);
 
116
                        --limit;
 
117
                        openMenu(child, limit);
111
118
                }
112
119
        }
113
120
}
114
121
 
115
 
void DBusMenuCollector::hideMenu(QMenu *menu) {
 
122
void DBusMenuCollector::hideMenu(QMenu *menu, unsigned int &limit) {
 
123
        if (limit == 0) {
 
124
                qWarning() << "Hit DBusMenu safety valve for menu at" << m_service
 
125
                                << m_path.path();
 
126
                return;
 
127
        }
 
128
 
116
129
        for (int i(0); i < menu->actions().size(); ++i) {
117
130
                QAction *action = menu->actions().at(i);
118
131
                QMenu *child(action->menu());
119
132
                if (child) {
120
 
                        hideMenu(child);
 
133
                        --limit;
 
134
                        hideMenu(child, limit);
121
135
                }
122
136
        }
123
137
 
136
150
        }
137
151
 
138
152
        if (collectorToken.isNull()) {
139
 
                openMenu(m_menuImporter->menu());
 
153
                unsigned int limit(50);
 
154
                openMenu(m_menuImporter->menu(), limit);
140
155
 
141
156
                if(m_menuImporter.isNull()) {
142
157
                        return QList<CollectorToken::Ptr>();
154
169
        if(m_menuImporter.isNull()) {
155
170
                return;
156
171
        }
157
 
        hideMenu(m_menuImporter->menu());
 
172
        unsigned int limit(50);
 
173
        hideMenu(m_menuImporter->menu(), limit);
158
174
}
159
175
 
160
176
void DBusMenuCollector::WindowRegistered(uint windowId, const QString &service,