Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriain <iain.holmes@xamarin.com>2017-08-01 16:56:01 +0300
committerGitHub <noreply@github.com>2017-08-01 16:56:01 +0300
commit698f0b5af3bf9419c3c2d956b5fdd8a06ccbcbde (patch)
tree21a98b304cc5dbfe1552b8765c1e8b286dcb750f /main/src/core/MonoDevelop.Ide
parent4dc87ae95578f9ee75178f5a76799831098ca985 (diff)
parent85e02044ebe74c690c5c1532a396eb1524e72133 (diff)
Merge pull request #2843 from mono/fix-53783
BXC #53783
Diffstat (limited to 'main/src/core/MonoDevelop.Ide')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelperMac.cs13
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelperNoOp.cs4
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/GtkNewProjectDialogBackend.cs39
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/INewProjectController.cs7
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs20
5 files changed, 72 insertions, 11 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelperMac.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelperMac.cs
index 6dedc4b8d9..f5210a61b1 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelperMac.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelperMac.cs
@@ -523,6 +523,19 @@ namespace MonoDevelop.Components.AtkCocoaHelper
nsa.AccessibilityLinkedUIElements = newLinkedElements;
}
+
+ public static void MakeAccessibilityAnnouncement (this Atk.Object o, string message)
+ {
+ if (o == null)
+ return;
+ var nsObject = GetNSAccessibilityElement (o) as NSObject;
+ if (nsObject == null)
+ return;
+ var dictionary =
+ new NSDictionary (NSAccessibilityNotificationUserInfoKeys.AnnouncementKey, new NSString (message),
+ NSAccessibilityNotificationUserInfoKeys.PriorityKey, NSAccessibilityPriorityLevel.High);
+ NSAccessibility.PostNotification (nsObject, NSAccessibilityNotifications.AnnouncementRequestedNotification, dictionary);
+ }
}
public class AccessibilityElementProxy : IAccessibilityElementProxy
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelperNoOp.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelperNoOp.cs
index 6843a55a72..bc2fc262f3 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelperNoOp.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelperNoOp.cs
@@ -153,6 +153,10 @@ namespace MonoDevelop.Components.AtkCocoaHelper
public static void AddLinkedUIElement (this Atk.Object o, params Atk.Object [] linked)
{
}
+
+ public static void MakeAccessibilityAnnouncement (this Atk.Object o, string message)
+ {
+ }
}
public class AccessibilityElementProxy : IAccessibilityElementProxy
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/GtkNewProjectDialogBackend.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/GtkNewProjectDialogBackend.cs
index dc478c4f36..b600b54c13 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/GtkNewProjectDialogBackend.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/GtkNewProjectDialogBackend.cs
@@ -34,7 +34,10 @@ using MonoDevelop.Components.AutoTest;
using MonoDevelop.Components.Commands;
using MonoDevelop.Ide.Templates;
using MonoDevelop.Ide.Gui;
-
+using MonoDevelop.Core;
+using System.Threading.Tasks;
+using MonoDevelop.Ide.Projects;
+
namespace MonoDevelop.Ide.Projects
{
partial class GtkNewProjectDialogBackend : INewProjectDialogBackend
@@ -59,7 +62,7 @@ namespace MonoDevelop.Ide.Projects
templatesTreeView.Selection.SelectFunction = TemplatesTreeViewSelection;
templatesTreeView.RowActivated += TreeViewRowActivated;
cancelButton.Clicked += CancelButtonClicked;
- nextButton.Clicked += (sender, e) => MoveToNextPage ();
+ nextButton.Clicked += NextButtonClicked;
previousButton.Clicked += (sender, e) => MoveToPreviousPage ();
nextButton.CanDefault = true;
@@ -68,8 +71,26 @@ namespace MonoDevelop.Ide.Projects
// Setup the treeview to be able to have a context menu
var actionHandler = new ActionDelegate (templatesTreeView);
actionHandler.PerformShowMenu += PerformShowMenu;
- }
+ }
+
+ void ProjectCreationFailed (object obj, EventArgs args) => ShowProjectCreationAccessibityNotification (true);
+ void ProjectCreated(object obj, EventArgs args) => ShowProjectCreationAccessibityNotification (false);
+ async void NextButtonClicked (object sender, EventArgs e) => await MoveToNextPage ();
+
+ void ShowProjectCreationAccessibityNotification (bool hasError)
+ {
+ var projectTemplate = controller.SelectedTemplate;
+ string messageText;
+
+ if (hasError)
+ messageText = GettextCatalog.GetString ("{0} failed to create", projectTemplate.Name);
+ else
+ messageText = GettextCatalog.GetString ("{0} successfully created", projectTemplate.Name);
+
+ this.Accessible.MakeAccessibilityAnnouncement (messageText);
+ }
+
public void ShowDialog ()
{
MessageService.ShowCustomDialog (this);
@@ -88,16 +109,17 @@ namespace MonoDevelop.Ide.Projects
public void RegisterController (INewProjectDialogController controller)
{
this.controller = controller;
+ controller.ProjectCreationFailed += ProjectCreationFailed;
+ controller.ProjectCreated += ProjectCreated;
languageCellRenderer.SelectedLanguage = controller.SelectedLanguage;
topBannerLabel.Text = controller.BannerText;
-
LoadTemplates ();
SelectTemplateDefinedbyController ();
if (CanMoveToNextPage && !controller.ShowTemplateSelection)
MoveToNextPage ();
}
- static void SetTemplateCategoryCellData (TreeViewColumn col, CellRenderer renderer, TreeModel model, TreeIter it)
+ void SetTemplateCategoryCellData (TreeViewColumn col, CellRenderer renderer, TreeModel model, TreeIter it)
{
var categoryTextRenderer = (GtkTemplateCategoryCellRenderer)renderer;
categoryTextRenderer.Category = (TemplateCategory)model.GetValue (it, TemplateCategoryColumn);
@@ -247,6 +269,9 @@ namespace MonoDevelop.Ide.Projects
if (!controller.IsLastPage)
projectConfigurationWidget.Destroy ();
+ controller.ProjectCreationFailed -= ProjectCreationFailed;
+ controller.ProjectCreated -= ProjectCreated;
+
base.Destroy ();
}
@@ -508,12 +533,14 @@ namespace MonoDevelop.Ide.Projects
}
}
- async void MoveToNextPage ()
+ async Task MoveToNextPage ()
{
if (controller.IsLastPage) {
try {
CanMoveToNextPage = false;
await controller.Create ();
+ } catch {
+ throw;
} finally {
CanMoveToNextPage = true;
}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/INewProjectController.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/INewProjectController.cs
index ebf0154203..f1c0aea808 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/INewProjectController.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/INewProjectController.cs
@@ -29,11 +29,14 @@ using System.Collections.Generic;
using MonoDevelop.Ide.Templates;
using Xwt.Drawing;
using System.Threading.Tasks;
-
+using System;
+
namespace MonoDevelop.Ide.Projects
{
interface INewProjectDialogController
- {
+ {
+ event EventHandler ProjectCreationFailed;
+ event EventHandler ProjectCreated;
IEnumerable<TemplateCategory> TemplateCategories { get; }
List<SolutionTemplate> RecentTemplates { get; }
TemplateCategory SelectedSecondLevelCategory { get; }
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 b1309458b6..bcc8f7d9fc 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs
@@ -1,4 +1,4 @@
-//
+//
// NewProjectDialogController.cs
//
// Author:
@@ -43,6 +43,7 @@ using MonoDevelop.Ide.Templates;
using MonoDevelop.Projects;
using Xwt.Drawing;
using System.Threading.Tasks;
+using System.Threading;
namespace MonoDevelop.Ide.Projects
{
@@ -50,7 +51,10 @@ namespace MonoDevelop.Ide.Projects
/// To be renamed to NewProjectDialog
/// </summary>
class NewProjectDialogController : INewProjectDialogController
- {
+ {
+ public event EventHandler ProjectCreationFailed;
+ public event EventHandler ProjectCreated;
+
string chooseTemplateBannerText = GettextCatalog.GetString ("Choose a template for your new project");
string configureYourWorkspaceBannerText = GettextCatalog.GetString ("Configure your new workspace");
string configureYourSolutionBannerText = GettextCatalog.GetString ("Configure your new solution");
@@ -610,8 +614,10 @@ namespace MonoDevelop.Ide.Projects
if (wizardProvider.HasWizard)
wizardProvider.BeforeProjectIsCreated ();
- if (!await CreateProject ())
+ if (!await CreateProject ()) {
+ ProjectCreationFailed?.Invoke (this, EventArgs.Empty);
return;
+ }
Solution parentSolution = null;
@@ -697,6 +703,14 @@ namespace MonoDevelop.Ide.Projects
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 ();
}