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
177}177}
178 178
179void ScriptEngine::runDebuggable() {179void 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
180 init();196 init();
181 _isRunning = true;197 _isRunning = true;
182 _debuggable = true;198 _debuggable = true;
183 _debugger = new QScriptEngineDebugger(this);199 _debugger = new QScriptEngineDebugger(this);
184 _debugger->attachTo(this);200 _debugger->attachTo(this);
185 static QMenu* scriptDebugMenu = qobject_cast<QMainWindow*>(qApp->activeWindow())->menuBar()->addMenu("Script Debug");201
186 scriptDebugMenu->addMenu(_fileNameString)->addMenu(_debugger->createStandardMenu(qApp->activeWindow()));202 QMenu* parentMenu = scriptDebugMenu;
187 _debugger->action(QScriptEngineDebugger::InterruptAction)->trigger();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
188 QScriptValue result = evaluate(_scriptContents, _fileNameString);212 QScriptValue result = evaluate(_scriptContents, _fileNameString);
189 213
190 _lastUpdate = usecTimestampNow();214 _lastUpdate = usecTimestampNow();
191 QTimer* timer = new QTimer(this);215 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 }
193 disconnect(timer); 225 disconnect(timer);
194 });226 });
195 227