From 0a5094097d134f874880c8b899cc6c712b5bcb3b Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@nokia.com>
Date: Tue, 19 Oct 2010 13:07:19 +0200
Subject: [PATCH] Welcome: Do not open main.cpp when project loading was
 canceled

When choosing an example from the welcome screen and the user
cancels loading the project:
 * Do not switch to edit mode
 * Do not load main.cpp
 * Do not pop up help

Task-number: QTCREATORBUG-2774
Reviewed-by: Daniel Molkentin
---
 src/plugins/coreplugin/icore.h                     |  8 +++++++-
 src/plugins/coreplugin/mainwindow.cpp              | 14 +++++++++-----
 .../gettingstartedwelcomepagewidget.cpp            |  5 +++--
 3 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h
index ad353f734c9..f6b31f33f34 100644
--- a/src/plugins/coreplugin/icore.h
+++ b/src/plugins/coreplugin/icore.h
@@ -119,7 +119,13 @@ public:
     virtual void addContextObject(IContext *context) = 0;
     virtual void removeContextObject(IContext *context) = 0;
 
-    enum OpenFilesFlags { None = 0, SwitchMode = 1, CanContainLineNumbers = 2};
+    enum OpenFilesFlags {
+        None = 0,
+        SwitchMode = 1,
+        CanContainLineNumbers = 2,
+         /// Stop loading once the first file fails to load
+        StopOnLoadFail = 4
+    };
     virtual void openFiles(const QStringList &fileNames, OpenFilesFlags flags = None) = 0;
 
 signals:
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index 487976bb0c9..3737fb05fc8 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -829,16 +829,20 @@ void MainWindow::openFiles(const QStringList &fileNames, ICore::OpenFilesFlags f
         const QFileInfo fi(fileName);
         const QString absoluteFilePath = fi.absoluteFilePath();
         if (IFileFactory *fileFactory = findFileFactory(nonEditorFileFactories, mimeDatabase(), fi)) {
-            fileFactory->open(absoluteFilePath);
-            if (flags && ICore::SwitchMode)
+            Core::IFile *file = fileFactory->open(absoluteFilePath);
+            if (!file && (flags & ICore::StopOnLoadFail))
+                return;
+            if (file && (flags & ICore::SwitchMode))
                 Core::ModeManager::instance()->activateMode(Core::Constants::MODE_EDIT);
         } else {
             QFlags<EditorManager::OpenEditorFlag> emFlags;
-            if (flags && ICore::SwitchMode)
+            if (flags & ICore::SwitchMode)
                 emFlags = EditorManager::ModeSwitch;
-            if (flags && ICore::CanContainLineNumbers)
+            if (flags & ICore::CanContainLineNumbers)
                 emFlags |=  EditorManager::CanContainLineNumber;
-            editorManager()->openEditor(absoluteFilePath, QString(), emFlags);
+            Core::IEditor *editor = editorManager()->openEditor(absoluteFilePath, QString(), emFlags);
+            if (!editor && (flags & ICore::StopOnLoadFail))
+                return;
         }
     }
 }
diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp
index 1bbe67b45bc..50cccb88225 100644
--- a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp
+++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp
@@ -33,6 +33,7 @@
 #include <coreplugin/icore.h>
 #include <coreplugin/helpmanager.h>
 #include <coreplugin/coreconstants.h>
+#include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/mainwindow.h>
 #include <coreplugin/rssfetcher.h>
 #include <projectexplorer/projectexplorer.h>
@@ -329,8 +330,8 @@ void GettingStartedWelcomePageWidget::slotOpenExample()
         tryFile = proFileInfo.path() + '/' + proFileInfo.baseName() + ".qml";
     if(QFile::exists(tryFile))
         files << tryFile;
-    Core::ICore::instance()->openFiles(files, Core::ICore::SwitchMode);
-    if (!helpFile.isEmpty())
+    Core::ICore::instance()->openFiles(files, static_cast<Core::ICore::OpenFilesFlags>(Core::ICore::SwitchMode | Core::ICore::StopOnLoadFail));
+    if (!tryFile.isEmpty() && Core::EditorManager::instance()->hasEditor(tryFile) && !helpFile.isEmpty())
         slotOpenContextHelpPage(helpFile);
 }
 
-- 
GitLab