| 300 | } |
| 301 | |
| 302 | ProjectSet::ProjectSet(QObject* parent) |
| 303 | : WatchedDocumentSet(parent) |
| 304 | { |
| 305 | // Multiple projects can share a project file manager, e.g. CMakeManager. When a project P that |
| 306 | // is being opened uses an already tracked project file manager, fileAdded() is invoked for each file |
| 307 | // that belongs to P. If P contains thousands of files with many problems, KDevelop UI freezes, |
| 308 | // because the ProblemReporterModel model is reset on each document set change. |
| 309 | // Suspend adding files while a project is being opened. Derived classes connect to the signal |
| 310 | // IProjectController::projectOpened and add all of the newly opened project's files at once, if needed. |
| 311 | const auto* const projectController = ICore::self()->projectController(); |
| 312 | connect(projectController, &IProjectController::projectAboutToBeOpened, this, [this] { |
| 313 | m_pauseAddingFiles = true; |
| 314 | }); |
| 315 | const auto projectOpeningOver = [this] { |
| 316 | m_pauseAddingFiles = false; |
| 317 | }; |
| 318 | connect(projectController, &IProjectController::projectOpened, this, projectOpeningOver); |
| 319 | connect(projectController, &IProjectController::projectOpeningAborted, this, projectOpeningOver); |
| 320 | } |
| 321 | |
| 322 | void ProjectSet::fileAdded(ProjectFileItem* file) |
| 323 | { |
nothing calls this directly
no test coverage detected