diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 2029211066ad0197b9ef8331422e9e46efdcdee2..4dbd52206cb54001748954be9cce9ee26116aca2 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -390,12 +390,18 @@ QString Project::generatedUiHeader(const QString & /* formFile */) const void Project::setProjectContext(Core::Context context) { + if (d->m_projectContext == context) + return; d->m_projectContext = context; + emit projectContextUpdated(); } void Project::setProjectLanguages(Core::Context language) { + if (d->m_projectLanguages == language) + return; d->m_projectLanguages = language; + emit projectLanguagesUpdated(); } Core::Context Project::projectContext() const diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index a8013ad37b8dbce0dc451b3774b7b7caaae8743d..2f8e167bc7d796a1c6a2339d6db65b4269acfc4d 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -142,6 +142,9 @@ signals: void settingsLoaded(); void aboutToSaveSettings(); + void projectContextUpdated(); + void projectLanguagesUpdated(); + protected: virtual bool fromMap(const QVariantMap &map); virtual bool setupTarget(Target *t); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 1422a5a32b31fe1f7817fed0d4c8cca36d8f1d6c..c356bdd8b8bac1bbd1bad5afb255404036c99e90 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -211,6 +211,7 @@ struct ProjectExplorerPluginPrivate { QString m_sessionToRestoreAtStartup; Project *m_currentProject; + Core::Context m_lastProjectContext; Node *m_currentNode; BuildManager *m_buildManager; @@ -1757,7 +1758,25 @@ void ProjectExplorerPlugin::updateExternalFileWarning() } infoBar->addInfo(Core::InfoBarEntry(externalFileId, tr("<b>Warning:</b> This file is outside the project directory."), - Core::InfoBarEntry::GlobalSuppressionEnabled)); + Core::InfoBarEntry::GlobalSuppressionEnabled)); +} + +void ProjectExplorerPlugin::updateContext() +{ + Core::Context oldContext; + oldContext.add(d->m_lastProjectContext); + + Core::Context newContext; + if (d->m_currentProject) { + newContext.add(d->m_currentProject->projectContext()); + newContext.add(d->m_currentProject->projectLanguages()); + + d->m_lastProjectContext = newContext; + } else { + d->m_lastProjectContext = Core::Context(); + } + + Core::ICore::updateAdditionalContexts(oldContext, newContext); } void ProjectExplorerPlugin::setCurrent(Project *project, QString filePath, Node *node) @@ -1773,24 +1792,22 @@ void ProjectExplorerPlugin::setCurrent(Project *project, QString filePath, Node bool projectChanged = false; if (d->m_currentProject != project) { - Core::Context oldContext; - Core::Context newContext; - if (d->m_currentProject) { - oldContext.add(d->m_currentProject->projectContext()); - oldContext.add(d->m_currentProject->projectLanguages()); + disconnect(d->m_currentProject, SIGNAL(projectContextUpdated()), + this, SLOT(updateContext())); + disconnect(d->m_currentProject, SIGNAL(projectLanguagesUpdated()), + this, SLOT(updateContext())); } if (project) { - newContext.add(project->projectContext()); - newContext.add(project->projectLanguages()); + connect(project, SIGNAL(projectContextUpdated()), + this, SLOT(updateContext())); + connect(project, SIGNAL(projectLanguagesUpdated()), + this, SLOT(updateContext())); } - - Core::ICore::updateAdditionalContexts(oldContext, newContext); - - d->m_currentProject = project; - projectChanged = true; } + d->m_currentProject = project; + updateContext(); if (!node && Core::EditorManager::currentEditor()) { connect(Core::EditorManager::currentEditor(), SIGNAL(changed()), diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index 8beb263a16a2483b84ebd175b3352968ea3eed31..f6dd689f49530703cf41a8111789ab264905505d 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -239,6 +239,8 @@ private slots: void updateWelcomePage(); void updateExternalFileWarning(); + void updateContext(); + #ifdef WITH_TESTS void testAnsiFilterOutputParser_data(); void testAnsiFilterOutputParser();