diff options
author | iain <iain.holmes@xamarin.com> | 2017-08-01 16:56:01 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-01 16:56:01 +0300 |
commit | 698f0b5af3bf9419c3c2d956b5fdd8a06ccbcbde (patch) | |
tree | 21a98b304cc5dbfe1552b8765c1e8b286dcb750f /main/src | |
parent | 4dc87ae95578f9ee75178f5a76799831098ca985 (diff) | |
parent | 85e02044ebe74c690c5c1532a396eb1524e72133 (diff) |
Merge pull request #2843 from mono/fix-53783
BXC #53783
Diffstat (limited to 'main/src')
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 ();
}
|