diff options
author | iain holmes <iain@xamarin.com> | 2017-02-20 19:55:18 +0300 |
---|---|---|
committer | iain holmes <iain@xamarin.com> | 2017-02-20 19:55:18 +0300 |
commit | 75717c80f92cf0eb36fb6fc20448c06e74c48d2f (patch) | |
tree | 64a0f8374f8c6189708fde07972b5f28b1b4f2e1 /main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper | |
parent | ee1e31864b20102dd2b8c232eb55415a7ec33e66 (diff) |
[A11y] Automatically detect actions on AccessibilityElementProxy
Detect the supported actions on AccessibilityElementProxy by tracking which events
are handled
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelperMac.cs | 181 |
1 files changed, 158 insertions, 23 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 7126d8733d..a5129eaaea 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelperMac.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.AtkCocoaHelper/AtkCocoaHelperMac.cs @@ -28,6 +28,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Runtime.InteropServices; using AppKit; @@ -465,22 +466,150 @@ namespace MonoDevelop.Components.AtkCocoaHelper public class AccessibilityElementProxy : NSAccessibilityElement, INSAccessibility, IAccessibilityElementProxy { - public event EventHandler PerformCancel; - public event EventHandler PerformConfirm; - public event EventHandler PerformDecrement; - public event EventHandler PerformDelete; - public event EventHandler PerformIncrement; - public event EventHandler PerformPick; - public event EventHandler PerformPress; - public event EventHandler PerformRaise; - public event EventHandler PerformShowAlternateUI; - public event EventHandler PerformShowDefaultUI; - public event EventHandler PerformShowPopupMenu; + event EventHandler performCancel; + public event EventHandler PerformCancel { + add { + performCancel += value; + AddAction (AtkCocoa.Actions.AXCancel); + } + remove { + performCancel -= value; + RemoveAction (AtkCocoa.Actions.AXCancel); + } + } + + event EventHandler performConfirm; + public event EventHandler PerformConfirm { + add { + performConfirm += value; + AddAction (AtkCocoa.Actions.AXConfirm); + } + remove { + performConfirm -= value; + RemoveAction (AtkCocoa.Actions.AXConfirm); + } + } + event EventHandler performDecrement; + public event EventHandler PerformDecrement { + add { + performDecrement += value; + AddAction (AtkCocoa.Actions.AXDecrement); + } + remove { + performDecrement -= value; + RemoveAction (AtkCocoa.Actions.AXDecrement); + } + } + event EventHandler performDelete; + public event EventHandler PerformDelete { + add { + performDelete += value; + AddAction (AtkCocoa.Actions.AXDelete); + } + remove { + performDelete -= value; + RemoveAction (AtkCocoa.Actions.AXDelete); + } + } + event EventHandler performIncrement; + public event EventHandler PerformIncrement { + add { + performIncrement += value; + AddAction (AtkCocoa.Actions.AXIncrement); + } + remove { + performIncrement -= value; + RemoveAction (AtkCocoa.Actions.AXIncrement); + } + } + event EventHandler performPick; + public event EventHandler PerformPick { + add { + performPick += value; + AddAction (AtkCocoa.Actions.AXPick); + } + remove { + performPick -= value; + RemoveAction (AtkCocoa.Actions.AXPick); + } + } + event EventHandler performPress; + public event EventHandler PerformPress { + add { + performPress += value; + AddAction (AtkCocoa.Actions.AXPress); + } + remove { + performPress -= value; + RemoveAction (AtkCocoa.Actions.AXPress); + } + } + event EventHandler performRaise; + public event EventHandler PerformRaise { + add { + performRaise += value; + AddAction (AtkCocoa.Actions.AXRaise); + } + remove { + performRaise -= value; + RemoveAction (AtkCocoa.Actions.AXRaise); + } + } + event EventHandler performShowAlternateUI; + public event EventHandler PerformShowAlternateUI { + add { + performShowAlternateUI += value; + AddAction (AtkCocoa.Actions.AXShowAlternateUI); + } + remove { + performShowAlternateUI -= value; + RemoveAction (AtkCocoa.Actions.AXShowAlternateUI); + } + } + event EventHandler performShowDefaultUI; + public event EventHandler PerformShowDefaultUI { + add { + performShowDefaultUI += value; + AddAction (AtkCocoa.Actions.AXShowDefaultUI); + } + remove { + performShowDefaultUI -= value; + RemoveAction (AtkCocoa.Actions.AXShowDefaultUI); + } + } + event EventHandler performShowPopupMenu; + public event EventHandler PerformShowPopupMenu { + add { + performShowPopupMenu += value; + AddAction (AtkCocoa.Actions.AXShowMenu); + } + remove { + performShowPopupMenu -= value; + RemoveAction (AtkCocoa.Actions.AXShowMenu); + } + } protected Gtk.Widget parent; INSAccessibility parentElement; Rectangle realFrame; + void UpdateActions () + { + actions = realActions.Select (arg => arg.ToString ()).ToArray (); + } + + void AddAction (AtkCocoa.Actions action) + { + realActions.Add (action); + UpdateActions (); + } + + void RemoveAction (AtkCocoa.Actions action) + { + realActions.Remove (action); + UpdateActions (); + } + // The real parent is the Widget that ultimately this object will belong to // It is used to convert the frame public void SetGtkParent (Gtk.Widget realParent) @@ -661,8 +790,14 @@ namespace MonoDevelop.Components.AtkCocoaHelper return this; } + HashSet<AtkCocoa.Actions> realActions = new HashSet<AtkCocoa.Actions> (); + string [] actions; [Export ("accessibilityActionNames")] - public string [] Actions { get; set; } + public string [] Actions { + get { + return actions; + } + } [Export ("accessibilityPerformAction:")] public void performAction (string actionName) @@ -728,67 +863,67 @@ namespace MonoDevelop.Components.AtkCocoaHelper protected bool OnPerformCancel () { - PerformCancel?.Invoke (this, EventArgs.Empty); + performCancel?.Invoke (this, EventArgs.Empty); return true; } protected bool OnPerformConfirm () { - PerformConfirm?.Invoke (this, EventArgs.Empty); + performConfirm?.Invoke (this, EventArgs.Empty); return true; } protected bool OnPerformDecrement () { - PerformDecrement?.Invoke (this, EventArgs.Empty); + performDecrement?.Invoke (this, EventArgs.Empty); return true; } protected bool OnPerformDelete () { - PerformDelete?.Invoke (this, EventArgs.Empty); + performDelete?.Invoke (this, EventArgs.Empty); return true; } protected bool OnPerformIncrement () { - PerformIncrement?.Invoke (this, EventArgs.Empty); + performIncrement?.Invoke (this, EventArgs.Empty); return true; } protected bool OnPerformPick () { - PerformPick?.Invoke (this, EventArgs.Empty); + performPick?.Invoke (this, EventArgs.Empty); return true; } protected bool OnPerformPress () { - PerformPress?.Invoke (this, EventArgs.Empty); + performPress?.Invoke (this, EventArgs.Empty); return true; } protected bool OnPerformRaise () { - PerformRaise?.Invoke (this, EventArgs.Empty); + performRaise?.Invoke (this, EventArgs.Empty); return true; } protected bool OnPerformShowAlternateUI () { - PerformShowAlternateUI?.Invoke (this, EventArgs.Empty); + performShowAlternateUI?.Invoke (this, EventArgs.Empty); return true; } protected bool OnPerformShowDefaultUI () { - PerformShowDefaultUI?.Invoke (this, EventArgs.Empty); + performShowDefaultUI?.Invoke (this, EventArgs.Empty); return true; } protected bool OnPerformShowPopupMenu () { - PerformShowPopupMenu?.Invoke (this, EventArgs.Empty); + performShowPopupMenu?.Invoke (this, EventArgs.Empty); return true; } } |