diff --git a/src/plugins/projectexplorer/projecttree.cpp b/src/plugins/projectexplorer/projecttree.cpp
index ab3c95da9c8fece799eccd5db0b9bd23f49b864e..4d6c596377a34fbbd3b738a3ee75c7982cf19bc0 100644
--- a/src/plugins/projectexplorer/projecttree.cpp
+++ b/src/plugins/projectexplorer/projecttree.cpp
@@ -131,8 +131,13 @@ void ProjectTree::nodeChanged(ProjectTreeWidget *widget)
 void ProjectTree::update()
 {
     ProjectTreeWidget *focus = m_focusForContextMenu;
-    if (!focus)
+    static QPointer<ProjectTreeWidget> lastFocusedProjectTreeWidget;
+    if (!focus) {
         focus = Utils::findOrDefault(m_projectTreeWidgets, &ProjectTree::hasFocus);
+        lastFocusedProjectTreeWidget = focus;
+    }
+    if (!focus)
+        focus = lastFocusedProjectTreeWidget;
 
     if (focus)
         updateFromProjectTreeWidget(focus);
@@ -150,16 +155,12 @@ void ProjectTree::updateFromProjectTreeWidget(ProjectTreeWidget *widget)
 
 void ProjectTree::updateFromDocumentManager()
 {
-    Core::IDocument *document = Core::EditorManager::currentDocument();
-    const FileName fileName = document ? document->filePath() : FileName();
-
-    Node *currentNode = nullptr;
-    if (m_currentNode && m_currentNode->filePath() == fileName)
-        currentNode = m_currentNode;
-    else
-        currentNode = ProjectTreeWidget::nodeForFile(fileName);
-
-    updateFromNode(currentNode);
+    if (Core::IDocument *document = Core::EditorManager::currentDocument()) {
+        const FileName fileName = document->filePath();
+        updateFromNode(ProjectTreeWidget::nodeForFile(fileName));
+    } else {
+        updateFromNode(nullptr);
+    }
 }
 
 void ProjectTree::updateFromNode(Node *node)