diff options
Diffstat (limited to 'src/plugins/cpptools/cppmodelmanager.cpp')
-rw-r--r-- | src/plugins/cpptools/cppmodelmanager.cpp | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index ed1ebd1479..cc1979d6b7 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -233,6 +233,10 @@ CppModelManager::CppModelManager(QObject *parent) ProjectExplorer::ProjectExplorerPlugin *pe = ProjectExplorer::ProjectExplorerPlugin::instance(); QTC_ASSERT(pe, return); + m_delayedGcTimer = new QTimer(this); + m_delayedGcTimer->setSingleShot(true); + connect(m_delayedGcTimer, SIGNAL(timeout()), this, SLOT(GC())); + ProjectExplorer::SessionManager *session = pe->session(); connect(session, SIGNAL(projectAdded(ProjectExplorer::Project*)), this, SLOT(onProjectAdded(ProjectExplorer::Project*))); @@ -240,6 +244,9 @@ CppModelManager::CppModelManager(QObject *parent) connect(session, SIGNAL(aboutToRemoveProject(ProjectExplorer::Project*)), this, SLOT(onAboutToRemoveProject(ProjectExplorer::Project*))); + connect(session, SIGNAL(aboutToLoadSession(QString)), + this, SLOT(onAboutToLoadSession())); + connect(session, SIGNAL(aboutToUnloadSession(QString)), this, SLOT(onAboutToUnloadSession())); @@ -481,7 +488,7 @@ void CppModelManager::deleteCppEditorSupport(TextEditor::BaseTextEditor *textEdi ++numberOfClosedEditors; if (numberOfOpenEditors == 0 || numberOfClosedEditors == 5) { numberOfClosedEditors = 0; - GC(); + delayedGC(); } } @@ -663,6 +670,11 @@ void CppModelManager::onProjectAdded(ProjectExplorer::Project *) m_dirty = true; } +void CppModelManager::delayedGC() +{ + m_delayedGcTimer->start(500); +} + void CppModelManager::onAboutToRemoveProject(ProjectExplorer::Project *project) { do { @@ -671,6 +683,13 @@ void CppModelManager::onAboutToRemoveProject(ProjectExplorer::Project *project) m_projectToProjectsInfo.remove(project); } while (0); + delayedGC(); +} + +void CppModelManager::onAboutToLoadSession() +{ + if (m_delayedGcTimer->isActive()) + m_delayedGcTimer->stop(); GC(); } @@ -683,8 +702,6 @@ void CppModelManager::onAboutToUnloadSession() m_projectToProjectsInfo.clear(); m_dirty = true; } while (0); - - GC(); } void CppModelManager::onCoreAboutToClose() @@ -729,6 +746,7 @@ void CppModelManager::GC() // Announce removing files and replace the snapshot emit aboutToRemoveFiles(notReachableFiles); replaceSnapshot(newSnapshot); + emit gcFinished(); } void CppModelManager::finishedRefreshingSourceFiles(const QStringList &files) |