Fix handling of current node if project tree view is hidden

I'm not 100% sure that this fixes the crash from QTCREATORBUG-12876.
But it's clearly wrong to only check for removed nodes in the project
tree widget and thus only if a tree widget is shown.

Task-number: QTCREATORBUG-12876
Change-Id: Iaaafcef0fe408e8bc2f4d2b61133f4419a612d57
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
Daniel Teske
2014-10-02 12:32:50 +02:00
parent 0047718205
commit 4012b7590d
4 changed files with 38 additions and 36 deletions

View File

@@ -121,13 +121,6 @@ ProjectTreeWidget::ProjectTreeWidget(QWidget *parent)
Project *pro = SessionManager::startupProject();
if (pro)
m_model->setStartupProject(pro->rootProjectNode());
NodesWatcher *watcher = new NodesWatcher(this);
SessionManager::sessionNode()->registerWatcher(watcher);
connect(watcher, SIGNAL(foldersAboutToBeRemoved(FolderNode*,QList<FolderNode*>)),
this, SLOT(foldersAboutToBeRemoved(FolderNode*,QList<FolderNode*>)));
connect(watcher, SIGNAL(filesAboutToBeRemoved(FolderNode*,QList<FileNode*>)),
this, SLOT(filesAboutToBeRemoved(FolderNode*,QList<FileNode*>)));
m_view = new ProjectTreeView;
m_view->setModel(m_model);
@@ -279,32 +272,6 @@ void ProjectTreeWidget::recursiveSaveExpandData(const QModelIndex &index, QStrin
}
}
void ProjectTreeWidget::foldersAboutToBeRemoved(FolderNode *, const QList<FolderNode*> &list)
{
Node *n = ProjectExplorerPlugin::currentNode();
while (n) {
if (FolderNode *fn = qobject_cast<FolderNode *>(n)) {
if (list.contains(fn)) {
ProjectNode *pn = n->projectNode();
// Make sure the node we are switching too isn't going to be removed also
while (list.contains(pn))
pn = pn->parentFolderNode()->projectNode();
ProjectExplorerPlugin::setCurrentNode(pn);
break;
}
}
n = n->parentFolderNode();
}
}
void ProjectTreeWidget::filesAboutToBeRemoved(FolderNode *, const QList<FileNode*> &list)
{
if (FileNode *fileNode = qobject_cast<FileNode *>(ProjectExplorerPlugin::currentNode())) {
if (list.contains(fileNode))
ProjectExplorerPlugin::setCurrentNode(fileNode->projectNode());
}
}
QToolButton *ProjectTreeWidget::toggleSync()
{
return m_toggleSync;