diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp index e5f2bfe47bc82d3940f98e0c70c56ba7e3f2be31..a8e87ee682e2f9504f82bf6f5b8ebdd1acbf5687 100644 --- a/src/plugins/projectexplorer/projectwindow.cpp +++ b/src/plugins/projectexplorer/projectwindow.cpp @@ -277,9 +277,9 @@ ProjectWindow::ProjectWindow(QWidget *parent) connect(session, SIGNAL(aboutToSaveSession()), this, SLOT(saveStatus())); connect(session, SIGNAL(projectAdded(ProjectExplorer::Project*)), - this, SLOT(projectAdded(ProjectExplorer::Project*))); + this, SLOT(registerProject(ProjectExplorer::Project*))); connect(session, SIGNAL(aboutToRemoveProject(ProjectExplorer::Project*)), - this, SLOT(aboutToRemoveProject(ProjectExplorer::Project*))); + this, SLOT(deregisterProject(ProjectExplorer::Project*))); // Update properties to empty project for now: showProperties(-1, -1); @@ -296,7 +296,7 @@ void ProjectWindow::shutdown() disconnect(ProjectExplorerPlugin::instance()->session(), 0, this, 0); } -void ProjectWindow::projectAdded(ProjectExplorer::Project *project) +void ProjectWindow::registerProject(ProjectExplorer::Project *project) { if (!project || m_tabIndexToProject.contains(project)) return; @@ -320,13 +320,20 @@ void ProjectWindow::projectAdded(ProjectExplorer::Project *project) m_tabIndexToProject.insert(index, project); m_tabWidget->insertTab(index, project->displayName(), subtabs); + + connect(project, SIGNAL(supportedTargetIdsChanged()), + this, SLOT(refreshProject())); } -void ProjectWindow::aboutToRemoveProject(ProjectExplorer::Project *project) +void ProjectWindow::deregisterProject(ProjectExplorer::Project *project) { int index = m_tabIndexToProject.indexOf(project); if (index < 0) return; + + disconnect(project, SIGNAL(supportedTargetIdsChanged()), + this, SLOT(refreshProject())); + m_tabIndexToProject.removeAt(index); m_tabWidget->removeTab(index); } @@ -341,6 +348,16 @@ void ProjectWindow::saveStatus() // TODO } +void ProjectWindow::refreshProject() +{ + Project *project = qobject_cast<ProjectExplorer::Project *>(sender()); + if (!m_tabIndexToProject.contains(project)) + return; + + deregisterProject(project); + registerProject(project); +} + void ProjectWindow::showProperties(int index, int subIndex) { if (index < 0 || index >= m_tabIndexToProject.count()) diff --git a/src/plugins/projectexplorer/projectwindow.h b/src/plugins/projectexplorer/projectwindow.h index fb4fe10a742ad07dc8870562d8bff857889a400b..8edcb66d59a0b3bf7cdc770f27c807019f769288 100644 --- a/src/plugins/projectexplorer/projectwindow.h +++ b/src/plugins/projectexplorer/projectwindow.h @@ -90,8 +90,10 @@ private slots: void showProperties(int index, int subIndex); void restoreStatus(); void saveStatus(); - void projectAdded(ProjectExplorer::Project*); - void aboutToRemoveProject(ProjectExplorer::Project*); + void registerProject(ProjectExplorer::Project*); + void deregisterProject(ProjectExplorer::Project*); + + void refreshProject(); private: void removeCurrentWidget();