From 30dfae9007e3f77488a9f659a7e169ca47d191de Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@nokia.com>
Date: Thu, 25 Feb 2010 15:15:41 +0100
Subject: [PATCH] Fix Project pane synchronization in case one opens first file
 via Locator

Commit 38924e386 makes sure that the Project node is selected after
loading a new project, even when there is a current editor opened.

Make sure that we actually only block the sync if no new file is opened.

Done with mae.

Reviewed-by: mae
---
 src/plugins/projectexplorer/projecttreewidget.cpp | 15 +++++++++++----
 src/plugins/projectexplorer/projecttreewidget.h   |  2 +-
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp
index b89aba25132..682dd18d8d2 100644
--- a/src/plugins/projectexplorer/projecttreewidget.cpp
+++ b/src/plugins/projectexplorer/projecttreewidget.cpp
@@ -121,7 +121,7 @@ ProjectTreeWidget::ProjectTreeWidget(QWidget *parent)
           m_model(0),
           m_filterProjectsAction(0),
           m_autoSync(false),
-          m_currentItemLocked(false)
+          m_currentItemLocked(0)
 {
     m_model = new FlatModel(m_explorer->session()->sessionNode(), this);
     NodesWatcher *watcher = new NodesWatcher(this);
@@ -251,9 +251,13 @@ void ProjectTreeWidget::setCurrentItem(Node *node, Project *project)
         qDebug() << "ProjectTreeWidget::setCurrentItem(" << (project ? project->displayName() : "0")
                  << ", " <<  (node ? node->path() : "0") << ")";
     if (m_currentItemLocked) {
-        m_currentItemLocked = false;
-        return;
+        if (m_currentItemLocked == node) {
+            m_currentItemLocked = 0;
+            return;
+        }
+        m_currentItemLocked = 0;
     }
+
     if (!project) {
         return;
     }
@@ -290,11 +294,14 @@ void ProjectTreeWidget::showContextMenu(const QPoint &pos)
 
 void ProjectTreeWidget::handleProjectAdded(ProjectExplorer::Project *project)
 {
+    // We disable auto-synchronization for the current node so that the project
+    // is selected until another file is opened
+    m_currentItemLocked = m_model->nodeForIndex(m_view->currentIndex());
+
     Node *node = project->rootProjectNode();
     QModelIndex idx = m_model->indexForNode(node);
     m_view->setExpanded(idx, true);
     m_view->setCurrentIndex(idx);
-    m_currentItemLocked = true;
 }
 
 void ProjectTreeWidget::startupProjectChanged(ProjectExplorer::Project *project)
diff --git a/src/plugins/projectexplorer/projecttreewidget.h b/src/plugins/projectexplorer/projecttreewidget.h
index 564a85de63d..9c8e07fe60b 100644
--- a/src/plugins/projectexplorer/projecttreewidget.h
+++ b/src/plugins/projectexplorer/projecttreewidget.h
@@ -89,7 +89,7 @@ private:
     QModelIndex m_subIndex;
     QString m_modelId;
     bool m_autoSync;
-    bool m_currentItemLocked;
+    Node *m_currentItemLocked;
     friend class ProjectTreeWidgetFactory;
 };
 
-- 
GitLab