Skip to content
This repository was archived by the owner on Oct 4, 2021. It is now read-only.

Commit a9a857c

Browse files
authored
Merge pull request #9379 from mono/nuget-manage-packages-dialog-accessibility
[NuGet] Manage packages dialog accessibility
2 parents c02dc2e + dbb128a commit a9a857c

File tree

3 files changed

+58
-13
lines changed

3 files changed

+58
-13
lines changed

main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Gui/ManagePackagesDialog.UI.cs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ internal partial class ManagePackagesDialog : ExtendedTitleBarDialog
6161
Label errorMessageLabel;
6262
Label loadingSpinnerLabel;
6363
FrameBox noPackagesFoundFrame;
64+
Label noPackagesFoundLabel;
6465
ComboBox packageVersionComboBox;
6566
HBox packageVersionsHBox;
6667
Label packageVersionsLabel;
@@ -94,9 +95,19 @@ void Build ()
9495
var topHBox = new HBox ();
9596
topHBox.Margin = new WidgetSpacing (8, 5, 6, 5);
9697

98+
// HACK: VoiceOver does not work when using Accessible.Label so workaround this by using
99+
// Accessible.LabelWidget and hide the label since we do not need it.
100+
var packageSourceLabel = new Label ();
101+
packageSourceLabel.Text = GettextCatalog.GetString ("Package source");
102+
packageSourceLabel.Visible = false;
103+
topHBox.PackStart (packageSourceLabel);
104+
97105
packageSourceComboBox = new ComboBox ();
98106
packageSourceComboBox.Name = "packageSourceComboBox";
99107
packageSourceComboBox.MinWidth = 200;
108+
// Does not work:
109+
//packageSourceComboBox.Accessible.Label = GettextCatalog.GetString ("Package source");
110+
packageSourceComboBox.Accessible.LabelWidget = packageSourceLabel;
100111
topHBox.PackStart (packageSourceComboBox);
101112

102113
int tabLabelMinWidth = 60;
@@ -137,6 +148,7 @@ void Build ()
137148
packageSearchEntry = new SearchTextEntry ();
138149
packageSearchEntry.Name = "managePackagesDialogSearchEntry";
139150
packageSearchEntry.WidthRequest = 187;
151+
packageSearchEntry.PlaceholderText = GettextCatalog.GetString ("Search");
140152
packageSearchEntry.Accessible.Label = GettextCatalog.GetString ("Package Search");
141153
topHBox.PackEnd (packageSearchEntry);
142154

@@ -179,6 +191,7 @@ void Build ()
179191
packagesListView = new ListView ();
180192
packagesListView.BorderVisible = false;
181193
packagesListView.HeadersVisible = false;
194+
packagesListView.Accessible.Label = GettextCatalog.GetString ("Packages");
182195
packagesListVBox.PackStart (packagesListView, true, true);
183196

184197
// Loading spinner.
@@ -204,7 +217,7 @@ void Build ()
204217
var noPackagesFoundHBox = new HBox ();
205218
noPackagesFoundHBox.HorizontalPlacement = WidgetPlacement.Center;
206219

207-
var noPackagesFoundLabel = new Label ();
220+
noPackagesFoundLabel = new Label ();
208221
noPackagesFoundLabel.Text = GettextCatalog.GetString ("No matching packages found.");
209222
noPackagesFoundHBox.PackEnd (noPackagesFoundLabel);
210223

@@ -273,17 +286,19 @@ void Build ()
273286

274287
var packageIdLabel = new Label ();
275288
packageIdLabel.Font = packageInfoBoldFont;
276-
packageIdLabel.Text = GettextCatalog.GetString ("Id");
289+
packageIdLabel.Text = GettextCatalog.GetString ("ID");
277290
packageIdHBox.PackStart (packageIdLabel);
278291

279292
packageId = new Label ();
280293
packageId.Ellipsize = EllipsizeMode.End;
281294
packageId.TextAlignment = Alignment.End;
282295
packageId.Font = packageInfoSmallFont;
296+
packageId.Accessible.LabelWidget = packageIdLabel;
283297
packageIdLink = new LinkLabel ();
284298
packageIdLink.Ellipsize = EllipsizeMode.End;
285299
packageIdLink.TextAlignment = Alignment.End;
286300
packageIdLink.Font = packageInfoSmallFont;
301+
packageIdLink.Accessible.LabelWidget = packageIdLabel;
287302
packageIdHBox.PackEnd (packageIdLink, true);
288303
packageIdHBox.PackEnd (packageId, true);
289304

@@ -300,6 +315,7 @@ void Build ()
300315
packageAuthor.TextAlignment = Alignment.End;
301316
packageAuthor.Ellipsize = EllipsizeMode.End;
302317
packageAuthor.Font = packageInfoSmallFont;
318+
packageAuthor.Accessible.LabelWidget = packageAuthorLabel;
303319
packageAuthorHBox.PackEnd (packageAuthor, true);
304320

305321
// Package published
@@ -313,6 +329,7 @@ void Build ()
313329

314330
packagePublishedDate = new Label ();
315331
packagePublishedDate.Font = packageInfoSmallFont;
332+
packagePublishedDate.Accessible.LabelWidget = packagePublishedLabel;
316333
packagePublishedHBox.PackEnd (packagePublishedDate);
317334

318335
// Package downloads
@@ -326,6 +343,7 @@ void Build ()
326343

327344
packageDownloads = new Label ();
328345
packageDownloads.Font = packageInfoSmallFont;
346+
packageDownloads.Accessible.LabelWidget = packageDownloadsLabel;
329347
packageDownloadsHBox.PackEnd (packageDownloads);
330348

331349
// Package license.
@@ -354,6 +372,7 @@ void Build ()
354372
packageProjectPageLink = new LinkLabel ();
355373
packageProjectPageLink.Text = GettextCatalog.GetString ("Visit Page");
356374
packageProjectPageLink.Font = packageInfoSmallFont;
375+
packageProjectPageLink.Accessible.Label = GettextCatalog.GetString ("Visit Project Page");
357376
packageProjectPageHBox.PackEnd (packageProjectPageLink);
358377

359378
// Package dependencies
@@ -368,6 +387,7 @@ void Build ()
368387
packageDependenciesNoneLabel = new Label ();
369388
packageDependenciesNoneLabel.Text = GettextCatalog.GetString ("None");
370389
packageDependenciesNoneLabel.Font = packageInfoSmallFont;
390+
packageDependenciesNoneLabel.Accessible.LabelWidget = packageDependenciesLabel;
371391
packageDependenciesHBox.PackEnd (packageDependenciesNoneLabel);
372392

373393
// Package dependencies list.
@@ -379,6 +399,7 @@ void Build ()
379399
packageDependenciesList.Wrap = WrapMode.WordAndCharacter;
380400
packageDependenciesList.Margin = new WidgetSpacing (5);
381401
packageDependenciesList.Font = packageInfoSmallFont;
402+
packageDependenciesList.Accessible.LabelWidget = packageDependenciesLabel;
382403
packageDependenciesListHBox.PackStart (packageDependenciesList, true);
383404

384405
// Current package version.
@@ -400,11 +421,13 @@ void Build ()
400421

401422
currentPackageVersion = new Label ();
402423
currentPackageVersion.Font = packageInfoSmallFont;
424+
currentPackageVersion.Accessible.LabelWidget = currentPackageVersionLabel;
403425
currentPackageVersionWithInfoPopoverHBox.PackStart (currentPackageVersion);
404426

405427
currentPackageVersionInfoPopoverWidget = new InformationPopoverWidget ();
406428
currentPackageVersionInfoPopoverWidget.Severity = Ide.Tasks.TaskSeverity.Information;
407429
currentPackageVersionInfoPopoverWidget.Margin = new WidgetSpacing (5, 0, 0, 2);
430+
currentPackageVersionInfoPopoverWidget.Accessible.LabelWidget = currentPackageVersionLabel;
408431
currentPackageVersionWithInfoPopoverHBox.PackStart (currentPackageVersionInfoPopoverWidget);
409432

410433
currentPackageVersionHBox.PackStart (currentPackageVersionWithInfoPopoverHBox);
@@ -422,6 +445,7 @@ void Build ()
422445

423446
packageVersionComboBox = new ComboBox ();
424447
packageVersionComboBox.Name = "packageVersionComboBox";
448+
packageVersionComboBox.Accessible.LabelWidget = packageVersionsLabel;
425449
packageVersionsHBox.Spacing = 15;
426450
packageVersionsHBox.PackStart (packageVersionComboBox, true, true);
427451

main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Gui/ManagePackagesDialog.cs

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
using System;
2828
using System.Collections.Generic;
2929
using System.Linq;
30+
using MonoDevelop.Components.AtkCocoaHelper;
3031
using MonoDevelop.Core;
3132
using MonoDevelop.Ide;
3233
using MonoDevelop.Projects;
@@ -240,6 +241,7 @@ void InitializeProjectsListView ()
240241

241242
projectsListView = new ListView ();
242243
projectsListView.DataSource = projectStore;
244+
projectsListView.Accessible.LabelWidget = projectsListViewLabel;
243245

244246
// Selected project check box column.
245247
if (projectCheckBoxCellView != null)
@@ -248,16 +250,15 @@ void InitializeProjectsListView ()
248250
projectCheckBoxCellView.ActiveField = projectCheckedField;
249251
projectCheckBoxCellView.Editable = true;
250252
projectCheckBoxCellView.Toggled += ProjectCheckBoxCellViewToggled;
251-
var column = new ListViewColumn (string.Empty, projectCheckBoxCellView);
252-
projectsListView.Columns.Add (column);
253-
254-
// Project column.
255-
var textCellView = new TextCellView ();
256-
textCellView.TextField = projectNameField;
257-
column = new ListViewColumn (GettextCatalog.GetString ("Project"), textCellView) {
253+
var column = new ListViewColumn (GettextCatalog.GetString ("Project"), projectCheckBoxCellView) {
258254
CanResize = true,
259255
SortDataField = projectNameField
260256
};
257+
258+
// Project name.
259+
var textCellView = new TextCellView ();
260+
textCellView.TextField = projectNameField;
261+
column.Views.Add (textCellView);
261262
projectsListView.Columns.Add (column);
262263

263264
// Package version column
@@ -304,6 +305,8 @@ void ShowNoPackagesFoundMessage ()
304305
if (!String.IsNullOrWhiteSpace (packageSearchEntry.Text)) {
305306
packagesListView.Visible = false;
306307
noPackagesFoundFrame.Visible = true;
308+
309+
IdeApp.Workbench.RootWindow.Accessible.MakeAccessibilityAnnouncement (noPackagesFoundLabel.Text);
307310
}
308311
}
309312

@@ -553,6 +556,7 @@ void ShowPackages ()
553556
// Show spinner?
554557
} else if (viewModel.IsReadingPackages) {
555558
ClearPackages ();
559+
IdeApp.Workbench.RootWindow.Accessible.MakeAccessibilityAnnouncement (loadingSpinnerLabel.Text);
556560
} else {
557561
HideLoadingMessage ();
558562
}
@@ -607,6 +611,11 @@ void AppendPackagesToListView ()
607611

608612
if (packagesListViewWasEmpty && (packageStore.RowCount > 0)) {
609613
packagesListView.SelectRow (0);
614+
615+
string message = string.IsNullOrWhiteSpace (packageSearchEntry.Text)
616+
? GettextCatalog.GetString ("Packages loaded")
617+
: GettextCatalog.GetString ("Search completed");
618+
IdeApp.Workbench.RootWindow.Accessible.MakeAccessibilityAnnouncement (message);
610619
}
611620

612621
if (!viewModel.IsReadingPackages && (packageStore.RowCount == 0)) {
@@ -618,8 +627,18 @@ void AppendPackageToListView (ManagePackagesSearchResultViewModel packageViewMod
618627
{
619628
int row = packageStore.AddRow ();
620629
var accessibleDescription = StringBuilderCache.Allocate (packageViewModel.Id);
621-
if (packageViewModel.HasDownloadCount)
622-
accessibleDescription.Append (", ").Append (packageViewModel.GetDownloadCountDisplayText ()).Append (" ").Append (GettextCatalog.GetString ("Downloads"));
630+
if (packageViewModel.HasDownloadCount) {
631+
accessibleDescription.Append (", ");
632+
if (packageViewModel.ShowVersionInsteadOfDownloadCount) {
633+
accessibleDescription.Append (GettextCatalog.GetString ("Version"));
634+
accessibleDescription.Append (" ");
635+
accessibleDescription.Append (packageViewModel.GetDownloadCountOrVersionDisplayText ());
636+
} else {
637+
accessibleDescription.Append (packageViewModel.GetDownloadCountOrVersionDisplayText ());
638+
accessibleDescription.Append (" ");
639+
accessibleDescription.Append (GettextCatalog.GetString ("Downloads"));
640+
}
641+
}
623642
if (!string.IsNullOrEmpty (packageViewModel.Summary))
624643
accessibleDescription.Append (", ").Append (packageViewModel.Summary);
625644
packageStore.SetValues (row,
@@ -876,6 +895,8 @@ bool Search ()
876895
viewModel.SearchTerms = this.packageSearchEntry.Text;
877896
viewModel.Search ();
878897

898+
IdeApp.Workbench.RootWindow.Accessible.MakeAccessibilityAnnouncement (loadingSpinnerLabel.Text);
899+
879900
return false;
880901
}
881902

main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.NodeBuilders/PackageReferenceNodeDescriptor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ public PackageReferenceNodeDescriptor (PackageReferenceNode packageReferenceNode
4141
}
4242

4343
[LocalizedCategory ("Package")]
44-
[LocalizedDisplayName ("Id")]
45-
[LocalizedDescription ("Package Id.")]
44+
[LocalizedDisplayName ("ID")]
45+
[LocalizedDescription ("Package ID.")]
4646
public string Id {
4747
get { return packageReferenceNode.Id; }
4848
}

0 commit comments

Comments
 (0)