From cb784459c3c6dc6214b0ddc4604ab9ebb1a0596b Mon Sep 17 00:00:00 2001
From: Daniel Molkentin <daniel.molkentin@nokia.com>
Date: Fri, 12 Jun 2009 18:06:34 +0200
Subject: [PATCH] Do not temporary show the welcome mode when passing a session
 as argument

Reviewed-by: con
---
 src/plugins/coreplugin/icore.h                |  1 +
 src/plugins/coreplugin/mainwindow.cpp         |  3 +-
 .../projectexplorer/projectexplorer.cpp       | 43 ++++++++++---------
 src/plugins/projectexplorer/projectexplorer.h |  2 +
 4 files changed, 28 insertions(+), 21 deletions(-)

diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h
index 973f2b97b32..cb2f2042c1f 100644
--- a/src/plugins/coreplugin/icore.h
+++ b/src/plugins/coreplugin/icore.h
@@ -109,6 +109,7 @@ public:
     virtual void openFiles(const QStringList &fileNames) = 0;
 
 signals:
+    void coreAboutToOpen();
     void coreOpened();
     void saveSettingsRequested();
     void optionsDialogRequested();
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index c806e2c1f6d..8a30d04a584 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -348,8 +348,9 @@ void MainWindow::extensionsInitialized()
     m_actionManager->initialize();
     readSettings();
     updateContext();
-    show();
 
+    emit m_coreImpl->coreAboutToOpen();
+    show();
     emit m_coreImpl->coreOpened();
 }
 
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index b53700b28c4..c42acb95cca 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -703,6 +703,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
 
     updateActions();
 
+    connect(Core::ICore::instance(), SIGNAL(coreAboutToOpen()),
+            this, SLOT(determineSessionToRestoreAtStartup()));
     connect(Core::ICore::instance(), SIGNAL(coreOpened()), this, SLOT(restoreSession()));
 
     return true;
@@ -1041,6 +1043,24 @@ void ProjectExplorerPlugin::currentModeChanged(Core::IMode *mode)
         updateWelcomePage(welcomeMode);
 }
 
+void ProjectExplorerPlugin::determineSessionToRestoreAtStartup()
+{
+    QStringList sessions = m_session->sessions();
+    // We have command line arguments, try to find a session in them
+    QStringList arguments = ExtensionSystem::PluginManager::instance()->arguments();
+    // Default to no session loading
+    m_sessionToRestoreAtStartup = QString::null;
+    foreach (const QString &arg, arguments) {
+        if (sessions.contains(arg)) {
+            // Session argument
+            m_sessionToRestoreAtStartup = arg;
+            break;
+        }
+    }
+    if (!m_sessionToRestoreAtStartup.isNull())
+        Core::ICore::instance()->modeManager()->activateMode(Core::Constants::MODE_EDIT);
+}
+
 /*!
     \fn void ProjectExplorerPlugin::restoreSession()
 
@@ -1049,37 +1069,20 @@ void ProjectExplorerPlugin::currentModeChanged(Core::IMode *mode)
     default session and puts the list of recent projects and sessions
     onto the welcome page.
 */
-
 void ProjectExplorerPlugin::restoreSession()
 {
     if (debug)
         qDebug() << "ProjectExplorerPlugin::restoreSession";
 
-    QStringList sessions = m_session->sessions();
-
     // We have command line arguments, try to find a session in them
     QStringList arguments = ExtensionSystem::PluginManager::instance()->arguments();
-
-    // Default to no session loading
-    QString sessionToLoad = QString::null;
-    if (!arguments.isEmpty()) {
-        foreach (const QString &arg, arguments) {
-            if (sessions.contains(arg)) {
-                // Session argument
-                sessionToLoad = arg;
-                arguments.removeOne(arg);
-                if (debug)
-                    qDebug() << "Found session argument, restoring session" << sessionToLoad;
-                break;
-            }
-        }
-    }
+    arguments.removeOne(m_sessionToRestoreAtStartup);
 
     // Restore latest session or what was passed on the command line
-    if (sessionToLoad == QString::null) {
+    if (m_sessionToRestoreAtStartup == QString::null) {
         m_session->createAndLoadNewDefaultSession();
     } else {
-        m_session->loadSession(sessionToLoad);
+        m_session->loadSession(m_sessionToRestoreAtStartup);
     }
 
     // update welcome page
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index 985ff10d8ea..e6a00847b49 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -161,6 +161,7 @@ private slots:
     void updateSessionMenu();
     void setSession(QAction *action);
 
+    void determineSessionToRestoreAtStartup();
     void restoreSession();
     void loadSession(const QString &session);
     void runProject();
@@ -260,6 +261,7 @@ private:
 
     Internal::ProjectWindow *m_proWindow;
     SessionManager *m_session;
+    QString m_sessionToRestoreAtStartup;
 
     Project *m_currentProject;
     Node *m_currentNode;
-- 
GitLab