forked from qt-creator/qt-creator
Fix before exit crash in ProjectTree
When there are 2 top level projects in session, crash happens in foldersAboutToBeRemoved as currentNode() not properly updated and it points to previously unloaded dangling node. Change-Id: Ie3f88bdd03ec042ff1cce6712ed923465c902701 Reviewed-by: Daniel Teske <daniel.teske@theqtcompany.com>
This commit is contained in:
@@ -135,20 +135,6 @@ void ProjectTree::focusChanged()
|
|||||||
s_instance->updateFromFocus();
|
s_instance->updateFromFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ProjectTree::editorHasFocus()
|
|
||||||
{
|
|
||||||
Core::IEditor *editor = Core::EditorManager::currentEditor();
|
|
||||||
if (!editor)
|
|
||||||
return false;
|
|
||||||
QWidget *widget = editor->widget();
|
|
||||||
if (!widget)
|
|
||||||
return false;
|
|
||||||
widget = widget->focusWidget();
|
|
||||||
if (!widget)
|
|
||||||
return false;
|
|
||||||
return widget->hasFocus();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ProjectTree::updateFromFocus(bool invalidCurrentNode)
|
void ProjectTree::updateFromFocus(bool invalidCurrentNode)
|
||||||
{
|
{
|
||||||
ProjectTreeWidget *focus = Utils::findOrDefault(s_instance->m_projectTreeWidgets,
|
ProjectTreeWidget *focus = Utils::findOrDefault(s_instance->m_projectTreeWidgets,
|
||||||
@@ -156,7 +142,7 @@ void ProjectTree::updateFromFocus(bool invalidCurrentNode)
|
|||||||
|
|
||||||
if (focus)
|
if (focus)
|
||||||
updateFromProjectTreeWidget(focus);
|
updateFromProjectTreeWidget(focus);
|
||||||
else if (editorHasFocus())
|
else
|
||||||
updateFromDocumentManager(invalidCurrentNode);
|
updateFromDocumentManager(invalidCurrentNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,8 +156,7 @@ void ProjectTree::updateFromProjectTreeWidget(ProjectTreeWidget *widget)
|
|||||||
|
|
||||||
void ProjectTree::documentManagerCurrentFileChanged()
|
void ProjectTree::documentManagerCurrentFileChanged()
|
||||||
{
|
{
|
||||||
if (editorHasFocus())
|
updateFromFocus();
|
||||||
updateFromDocumentManager();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Project *ProjectTree::projectForNode(Node *node)
|
Project *ProjectTree::projectForNode(Node *node)
|
||||||
|
|||||||
@@ -89,7 +89,6 @@ private:
|
|||||||
void updateFromFocus(bool invalidCurrentNode = false);
|
void updateFromFocus(bool invalidCurrentNode = false);
|
||||||
|
|
||||||
void updateExternalFileWarning();
|
void updateExternalFileWarning();
|
||||||
bool editorHasFocus();
|
|
||||||
static bool hasFocus(Internal::ProjectTreeWidget *widget);
|
static bool hasFocus(Internal::ProjectTreeWidget *widget);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user