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:
Daniel Teske
2014-12-09 14:16:11 +03:00
parent a57d517202
commit 5bfd31f09c
2 changed files with 2 additions and 18 deletions

View File

@@ -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)

View File

@@ -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);