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
path: root/main
diff options
context:
space:
mode:
authorVsevolod Kukol <sevoku@microsoft.com>2019-11-27 00:57:44 +0300
committerGitHub <noreply@github.com>2019-11-27 00:57:44 +0300
commitddacb6c206f0ea260b2af4edc23f8b1fcfaa7661 (patch)
treedf0c78dc79ecbbf32d03bdbf84b390ce637cb36d /main
parenta9a857c5fca1fcda54adf5ae911dc353c2dc12d5 (diff)
parentd391c51d0d2ccb1c8bbc8e83068b21d23ba18fd4 (diff)
Merge pull request #9387 from mono/fix1021556-nuget-accessible-tabs
[NuGet][1021556] Make tab labels behave like real tabs with VO
Diffstat (limited to 'main')
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Gui/ManagePackagesDialog.UI.cs18
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Gui/ManagePackagesDialog.cs42
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelper.cs1
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelperMac.cs17
4 files changed, 67 insertions, 11 deletions
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Gui/ManagePackagesDialog.UI.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Gui/ManagePackagesDialog.UI.cs
index b2761fc54f..f8e2435b85 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Gui/ManagePackagesDialog.UI.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Gui/ManagePackagesDialog.UI.cs
@@ -69,6 +69,7 @@ namespace MonoDevelop.PackageManagement
Label installedLabel;
Label updatesLabel;
Label consolidateLabel;
+ HBox tabGroup;
VBox projectsListViewVBox;
Label projectsListViewLabel;
ListView projectsListView;
@@ -110,6 +111,8 @@ namespace MonoDevelop.PackageManagement
packageSourceComboBox.Accessible.LabelWidget = packageSourceLabel;
topHBox.PackStart (packageSourceComboBox);
+ tabGroup = new HBox ();
+
int tabLabelMinWidth = 60;
browseLabel = new Label ();
browseLabel.Text = GettextCatalog.GetString ("Browse");
@@ -117,33 +120,30 @@ namespace MonoDevelop.PackageManagement
browseLabel.MinWidth = tabLabelMinWidth;
browseLabel.MarginLeft = 10;
browseLabel.CanGetFocus = true;
- browseLabel.Accessible.Role = Xwt.Accessibility.Role.Button;
-
- topHBox.PackStart (browseLabel);
+ tabGroup.PackStart (browseLabel);
installedLabel = new Label ();
installedLabel.Text = GettextCatalog.GetString ("Installed");
installedLabel.Tag = installedLabel.Text;
installedLabel.MinWidth = tabLabelMinWidth;
installedLabel.CanGetFocus = true;
- installedLabel.Accessible.Role = Xwt.Accessibility.Role.Button;
- topHBox.PackStart (installedLabel);
+ tabGroup.PackStart (installedLabel);
updatesLabel = new Label ();
updatesLabel.Text = GettextCatalog.GetString ("Updates");
updatesLabel.Tag = updatesLabel.Text;
updatesLabel.MinWidth = tabLabelMinWidth;
updatesLabel.CanGetFocus = true;
- updatesLabel.Accessible.Role = Xwt.Accessibility.Role.Button;
- topHBox.PackStart (updatesLabel);
+ tabGroup.PackStart (updatesLabel);
consolidateLabel = new Label ();
consolidateLabel.Text = GettextCatalog.GetString ("Consolidate");
consolidateLabel.Tag = consolidateLabel.Text;
consolidateLabel.MinWidth = tabLabelMinWidth;
consolidateLabel.CanGetFocus = true;
- consolidateLabel.Accessible.Role = Xwt.Accessibility.Role.Button;
- topHBox.PackStart (consolidateLabel);
+ tabGroup.PackStart (consolidateLabel);
+
+ topHBox.PackStart (tabGroup);
packageSearchEntry = new SearchTextEntry ();
packageSearchEntry.Name = "managePackagesDialogSearchEntry";
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Gui/ManagePackagesDialog.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Gui/ManagePackagesDialog.cs
index ac6f6b1641..7934c29f42 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Gui/ManagePackagesDialog.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Gui/ManagePackagesDialog.cs
@@ -91,7 +91,6 @@ namespace MonoDevelop.PackageManagement
consolidateLabel.Visible = viewModel.IsManagingSolution;
UpdateDialogTitle ();
UpdatePackageSearchEntryWithInitialText (initialSearch);
- UpdatePackageResultsPageLabels ();
InitializeListView ();
UpdateAddPackagesButton ();
@@ -114,6 +113,33 @@ namespace MonoDevelop.PackageManagement
updatesLabel.KeyPressed += UpdatesLabelKeyPressed;
consolidateLabel.ButtonPressed += ConsolidateLabelButtonPressed;
consolidateLabel.KeyPressed += ConsolidateLabelKeyPressed;
+ UpdateTabAccessibility ();
+ UpdatePackageResultsPageLabels ();
+ }
+
+ void UpdateTabAccessibility ()
+ {
+ if (tabGroup.Surface.ToolkitEngine.Type == ToolkitType.Gtk) {
+ if (consolidateLabel.Parent.Surface.NativeWidget is Gtk.Container a11yGroup) {
+ a11yGroup.Accessible.SetRole (AtkCocoa.Roles.AXTabGroup);
+ var children = a11yGroup.Children;
+ var tabs = new List<Atk.Object> (children.Length);
+ foreach (var child in children) {
+ if (!child.Visible)
+ continue;
+ if (child is Gtk.EventBox box && box.Child is Gtk.Label) {
+ box.Accessible.SetTitleUIElement (box.Child.Accessible);
+ box.Child.Accessible.SetShouldIgnore (true);
+ }
+ var tab = child.Accessible;
+ tab.SetRole (AtkCocoa.Roles.AXRadioButton);
+ tab.SetSubRole (AtkCocoa.SubRoles.AXTabButton);
+ tab.SetValue (false);
+ tabs.Add (tab);
+ }
+ a11yGroup.Accessible.SetTabs (tabs.ToArray ());
+ }
+ }
}
public bool ShowPreferencesForPackageSources { get; private set; }
@@ -1131,12 +1157,26 @@ namespace MonoDevelop.PackageManagement
{
string text = (string)label.Tag;
if (page == viewModel.PageSelected) {
+ UpdatePackageResultsLabelA11y (label, true);
label.Markup = string.Format ("<b><u>{0}</u></b>", text);
} else {
+ UpdatePackageResultsLabelA11y (label, false);
label.Markup = text;
}
}
+ static void UpdatePackageResultsLabelA11y (Label label, bool active)
+ {
+ if (label.Surface.ToolkitEngine.Type == ToolkitType.Gtk) {
+ var widget = label.Surface.NativeWidget as Gtk.Widget;
+ if (widget != null) {
+ widget.Accessible.SetValue (active);
+ // FIXME: Accessible.SetValue has no effect, so set the role description instead
+ widget.Accessible.SetRole (AtkCocoa.Roles.AXRadioButton, active ? "selected tab" : "tab");
+ }
+ }
+ }
+
void UpdatePackageResultsLabel (ManagePackagesPage page, Button label)
{
string text = (string)label.Tag;
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelper.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelper.cs
index ae898d8000..f7bf217ada 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelper.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelper.cs
@@ -154,6 +154,7 @@ namespace MonoDevelop.Components.AtkCocoaHelper
public enum SubRoles
{
AXCloseButton,
+ AXTabButton,
};
public struct Range
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 62981cfc3e..97a4060dcf 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelperMac.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelperMac.cs
@@ -214,12 +214,22 @@ namespace MonoDevelop.Components.AtkCocoaHelper
public static void SetValue (this Atk.Object o, string stringValue)
{
+ SetValue (o, (NSObject) new NSString (stringValue));
+ }
+
+ public static void SetValue (this Atk.Object o, object value)
+ {
+ SetValue (o, NSObject.FromObject (value));
+ }
+
+ static void SetValue (this Atk.Object o, NSObject value)
+ {
var nsa = GetNSAccessibilityElement (o);
if (nsa == null) {
return;
}
- nsa.AccessibilityValue = new NSString (stringValue);
+ nsa.AccessibilityValue = value;
}
public static void SetUrl (this Atk.Object o, string url)
@@ -261,6 +271,11 @@ namespace MonoDevelop.Components.AtkCocoaHelper
nsa.AccessibilitySubrole = subrole;
}
+ public static void SetSubRole (this Atk.Object o, AtkCocoa.SubRoles subrole)
+ {
+ o.SetSubRole (subrole.ToString ());
+ }
+
public static void SetTitleUIElement (this Atk.Object o, Atk.Object title)
{
var nsa = GetNSAccessibilityElement (o);