diff options
author | Lluis Sanchez <lluis@xamarin.com> | 2019-07-31 17:57:33 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-31 17:57:33 +0300 |
commit | cf0230df38a6d61631075c892efcab3035aa7d69 (patch) | |
tree | f45682477f7ef58410de97e96edc807ef83fe7ab /main | |
parent | c51182794e9e06c8559f48af2666e8dd2d8ee1b5 (diff) | |
parent | f5778969723f80b4323de63278253bac35ef97ae (diff) |
Merge pull request #8194 from mono/backport-pr-8153-to-release-8.2
[release-8.2] [GetToCode] Adds ShowAsync method in NewProjectController with TaskCo…
Diffstat (limited to 'main')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs | 103 | ||||
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs | 7 |
2 files changed, 61 insertions, 49 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs index 7ccb045856..41d24f6c9f 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs @@ -181,9 +181,9 @@ namespace MonoDevelop.Ide.Projects imageProvider.Dispose ();
- return IsNewItemCreated;
- }
-
+ return ProjectCreation != null && !(ProjectCreation.IsCompleted && !ProjectCreation.Result); + } + void GetVersionControlHandler ()
{
versionControlHandler = AddinManager.GetExtensionObjects ("/MonoDevelop/Ide/VersionControlProjectTemplateHandler", typeof(IVersionControlProjectTemplateHandler), true)
@@ -613,10 +613,13 @@ namespace MonoDevelop.Ide.Projects public async Task Create ()
{
+ projectCreated = new TaskCompletionSource<bool> (); + if (wizardProvider.HasWizard)
wizardProvider.BeforeProjectIsCreated ();
- if (!await CreateProject ()) {
+ if (!await CreateProject ()) { + projectCreated.SetResult (false); ProjectCreationFailed?.Invoke (this, EventArgs.Empty);
return;
}
@@ -667,55 +670,59 @@ namespace MonoDevelop.Ide.Projects string solutionFileName = Path.Combine (projectConfiguration.SolutionLocation, finalConfigurationPage.SolutionFileName);
if (File.Exists (solutionFileName)) {
if (!MessageService.Confirm (GettextCatalog.GetString ("File {0} already exists. Overwrite?", solutionFileName), AlertButton.OverwriteFile)) {
- ParentFolder = null;//Reset process of creating solution
+ ParentFolder = null;//Reset process of creating solution + projectCreated.SetResult (false); return;
}
File.Delete (solutionFileName);
}
}
- dialog.CloseDialog ();
-
- if (ParentFolder != null)
- await IdeApp.ProjectOperations.SaveAsync (ParentFolder.ParentSolution);
- else
- await IdeApp.ProjectOperations.SaveAsync (processedTemplate.WorkspaceItems);
-
- CreateVersionControlItems ();
-
- if (OpenSolution) {
- DisposeExistingNewItems ();
- TemplateWizard wizard = wizardProvider.CurrentWizard;
- if (await OpenCreatedSolution (processedTemplate)) {
- var sol = IdeApp.Workspace.GetAllSolutions ().FirstOrDefault ();
- if (sol != null) {
- if (wizard != null)
- wizard.ItemsCreated (new [] { sol });
- InstallProjectTemplatePackages (sol);
- }
- }
- }
- else {
- // The item is not a solution being opened, so it is going to be added to
- // an existing item. In this case, it must not be disposed by the dialog.
- RunTemplateActions (processedTemplate);
- if (wizardProvider.HasWizard)
- wizardProvider.CurrentWizard.ItemsCreated (processedTemplate.WorkspaceItems);
- if (ParentFolder != null)
- InstallProjectTemplatePackages (ParentFolder.ParentSolution);
- }
-
- wizardProvider.Dispose ();
- IsNewItemCreated = true;
- UpdateDefaultSettings ();
-
- var tcs = new TaskCompletionSource<bool> (); - Gtk.Application.Invoke ((sender, args) => { - ProjectCreated?.Invoke (this, EventArgs.Empty); - tcs.SetResult (true); - });
- await tcs.Task;
- }
+ dialog.CloseDialog (); + + try { + if (ParentFolder != null) + await IdeApp.ProjectOperations.SaveAsync (ParentFolder.ParentSolution); + else + await IdeApp.ProjectOperations.SaveAsync (processedTemplate.WorkspaceItems); + + CreateVersionControlItems (); + + if (OpenSolution) { + DisposeExistingNewItems (); + TemplateWizard wizard = wizardProvider.CurrentWizard; + if (await OpenCreatedSolution (processedTemplate)) { + var sol = IdeApp.Workspace.GetAllSolutions ().FirstOrDefault (); + if (sol != null) { + if (wizard != null) + wizard.ItemsCreated (new [] { sol }); + InstallProjectTemplatePackages (sol); + } + } + } else { + // The item is not a solution being opened, so it is going to be added to + // an existing item. In this case, it must not be disposed by the dialog. + RunTemplateActions (processedTemplate); + if (wizardProvider.HasWizard) + wizardProvider.CurrentWizard.ItemsCreated (processedTemplate.WorkspaceItems); + if (ParentFolder != null) + InstallProjectTemplatePackages (ParentFolder.ParentSolution); + } + + wizardProvider.Dispose (); + IsNewItemCreated = true; + UpdateDefaultSettings (); + + projectCreated.SetResult (true); + await Runtime.RunInMainThread (() => ProjectCreated?.Invoke (this, EventArgs.Empty)); + } catch (Exception ex) { + projectCreated.SetException (ex); + throw; + } + } + + public Task<bool> ProjectCreation => projectCreated?.Task; + TaskCompletionSource<bool> projectCreated; public WizardPage CurrentWizardPage {
get {
@@ -937,7 +944,7 @@ namespace MonoDevelop.Ide.Projects public Image GetImage (SolutionTemplate template)
{
return imageProvider.GetImage (template);
- }
+ } }
}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs index 8f2ac13ba8..d1880c52c4 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs @@ -713,7 +713,12 @@ namespace MonoDevelop.Ide newProjectDialog.OpenSolution = true; newProjectDialog.SelectedTemplateId = defaultTemplate; newProjectDialog.ShowTemplateSelection = showTemplateSelection; - return newProjectDialog.Show (); + var show = newProjectDialog.Show (); + if (show) { + WelcomePage.WelcomePageService.HideWelcomePageOrWindow (); + return await newProjectDialog.ProjectCreation; + } + return false; } public Task<WorkspaceItem> AddNewWorkspaceItem (Workspace parentWorkspace) |