From 16b6079895b32a6a7797d2e03ddc59b9965331ab Mon Sep 17 00:00:00 2001
From: Daniel Teske <daniel.teske@digia.com>
Date: Tue, 12 Feb 2013 14:25:21 +0100
Subject: [PATCH] Open project from command line: Postpone the actual opening
 via a timer

This feels better, should not break anything.

Change-Id: Ibd0b8c20dce346e10cb7a35d6785ea2cb29f0e51
Reviewed-by: hjk <hjk121@nokiamail.com>
---
 src/plugins/projectexplorer/projectexplorer.cpp | 11 ++++++++++-
 src/plugins/projectexplorer/projectexplorer.h   |  1 +
 src/plugins/projectexplorer/session.cpp         |  4 ++++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 5eefe2bc852..47f28445879 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -134,6 +134,7 @@
 #include <QFileDialog>
 #include <QMenu>
 #include <QMessageBox>
+#include <QTimer>
 #include <QWizard>
 
 /*!
@@ -247,6 +248,7 @@ struct ProjectExplorerPluginPrivate {
     KitManager *m_kitManager;
     ToolChainManager *m_toolChainManager;
     bool m_shuttingDown;
+    QStringList m_arguments;
 };
 
 ProjectExplorerPluginPrivate::ProjectExplorerPluginPrivate() :
@@ -1597,10 +1599,17 @@ void ProjectExplorerPlugin::restoreSession()
     connect(d->m_welcomePage, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString)));
     connect(d->m_welcomePage, SIGNAL(requestProject(QString)), this, SLOT(openProjectWelcomePage(QString)));
 
-    Core::ICore::openFiles(arguments, Core::ICore::OpenFilesFlags(Core::ICore::CanContainLineNumbers | Core::ICore::SwitchMode));
+    d->m_arguments = arguments;
+    QTimer::singleShot(0, this, SLOT(restoreSession2()));
     updateActions();
 }
 
+void ProjectExplorerPlugin::restoreSession2()
+{
+    QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
+    Core::ICore::openFiles(d->m_arguments, Core::ICore::OpenFilesFlags(Core::ICore::CanContainLineNumbers | Core::ICore::SwitchMode));
+}
+
 void ProjectExplorerPlugin::loadSession(const QString &session)
 {
     if (debug)
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index d85c784d76a..b8bbfee40e6 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -188,6 +188,7 @@ private slots:
 
     void determineSessionToRestoreAtStartup();
     void restoreSession();
+    void restoreSession2();
     void loadSession(const QString &session);
     void runProject();
     void runProjectWithoutDeploy();
diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp
index 75423af7869..a52c948f9c5 100644
--- a/src/plugins/projectexplorer/session.cpp
+++ b/src/plugins/projectexplorer/session.cpp
@@ -880,6 +880,10 @@ bool SessionManager::loadSession(const QString &session)
         m_future.setProgressRange(0, fileList.count() + openEditorsCount + 2);
         m_future.setProgressValue(1);
 
+        // if one processEvents doesn't get the job done
+        // just use two!
+        QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
+        QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
         restoreProjects(fileList);
         sessionLoadingProgress();
         restoreDependencies(reader);
-- 
GitLab