History

Debugging menu destruction

Brad Davis committed 10 years ago

Commit b117a4b1 parent 40316491 file · +36 −4Browse files

Showing the changes to libraries/script-engine/src/ScriptEngine.cpp (1 of 1 file). Show all

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+36−4
@@ -177,19 +177,51 @@ void ScriptEngine::disconnectNonEssentialSignals() { · 176 unmodified lines
177177 }
178178
179179 void ScriptEngine::runDebuggable() {
180+ static QMenuBar* menuBar { nullptr };
181+ static QMenu* scriptDebugMenu { nullptr };
182+ static size_t scriptMenuCount { 0 };
183+ if (!scriptDebugMenu) {
184+ for (auto window : qApp->topLevelWidgets()) {
185+ auto mainWindow = qobject_cast<QMainWindow*>(window);
186+ if (mainWindow) {
187+ menuBar = mainWindow->menuBar();
188+ break;
189+ }
190+ }
191+ if (menuBar) {
192+ scriptDebugMenu = menuBar->addMenu("Script Debug");
193+ }
194+ }
195+
180196 init();
181197 _isRunning = true;
182198 _debuggable = true;
183199 _debugger = new QScriptEngineDebugger(this);
184200 _debugger->attachTo(this);
185− static QMenu* scriptDebugMenu = qobject_cast<QMainWindow*>(qApp->activeWindow())->menuBar()->addMenu("Script Debug");
186− scriptDebugMenu->addMenu(_fileNameString)->addMenu(_debugger->createStandardMenu(qApp->activeWindow()));
187− _debugger->action(QScriptEngineDebugger::InterruptAction)->trigger();
201+
202+ QMenu* parentMenu = scriptDebugMenu;
203+ QMenu* scriptMenu { nullptr };
204+ if (parentMenu) {
205+ ++scriptMenuCount;
206+ scriptMenu = parentMenu->addMenu(_fileNameString);
207+ scriptMenu->addMenu(_debugger->createStandardMenu(qApp->activeWindow()));
208+ } else {
209+ qWarning() << "Unable to add script debug menu";
210+ }
211+
188212 QScriptValue result = evaluate(_scriptContents, _fileNameString);
189213
190214 _lastUpdate = usecTimestampNow();
191215 QTimer* timer = new QTimer(this);
192− connect(this, &ScriptEngine::finished, [this, timer] {
216+ connect(this, &ScriptEngine::finished, [this, timer, parentMenu, scriptMenu] {
217+ if (scriptMenu) {
218+ parentMenu->removeAction(scriptMenu->menuAction());
219+ --scriptMenuCount;
220+ if (0 == scriptMenuCount) {
221+ menuBar->removeAction(scriptDebugMenu->menuAction());
222+ scriptDebugMenu = nullptr;
223+ }
224+ }
193225 disconnect(timer);
194226 });
195227