public delegate bool AccessibilityDeselectChild(IntPtr self, int childIndex);
[EditorBrowsable(EditorBrowsableState.Never)]
public AccessibilityDeselectChild DeselectChild; // 35
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate uint AccessibilityGetInterfaces(IntPtr self);
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public AccessibilityGetInterfaces GetInterfaces; // 36
}
[DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_Toolkit_DevelControl_SetAccessibilityConstructor_NUI")]
- public static extern void DaliToolkitDevelControlSetAccessibilityConstructor(HandleRef arg1_self, int arg2_role, int arg3_iface);
+ public static extern void DaliToolkitDevelControlSetAccessibilityConstructor(HandleRef arg1_self, int arg2_role);
[DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_Accessibility_DuplicateString")]
public static extern IntPtr DaliAccessibilityDuplicateString(string arg);
[EditorBrowsable(EditorBrowsableState.Never)]
public void SetAccessibilityConstructor(Role role, AccessibilityInterface accessibilityInterface = AccessibilityInterface.None)
{
- Interop.ControlDevel.DaliToolkitDevelControlSetAccessibilityConstructor(SwigCPtr, (int)role, (int)accessibilityInterface);
+ // We have to store the interface flags until we remove SetAccessibilityConstructor and switch to native C# interfaces
+ AtspiInterfaceFlags = (1U << (int)accessibilityInterface);
+ Interop.ControlDevel.DaliToolkitDevelControlSetAccessibilityConstructor(SwigCPtr, (int)role);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
/// <summary>
/// Accessibility interface.
/// </summary>
+ // Values are from Dali::Accessibility::AtspiInterface
[EditorBrowsable(EditorBrowsableState.Never)]
public enum AccessibilityInterface
{
/// Accessibility interface which can store numeric value
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- Value = 1,
+ Value = 26,
/// <summary>
/// Accessibility interface which can store editable texts
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- EditableText = 2,
+ EditableText = 9,
/// <summary>
/// Accessibility interface which can store a set of selected items
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
- Selection = 3,
+ Selection = 21,
}
/// <summary>
{
private static AccessibilityStates AccessibilityInitialStates = new AccessibilityStates();
+ // To be removed when native C# AT-SPI interfaces are implemented.
+ private uint? AtspiInterfaceFlags = null;
+
private static void RegisterAccessibilityDelegate()
{
InitializeAccessibilityDelegateAccessibleInterface();
ad.CalculateStates = AccessibilityCalculateStatesWrapper;
ad.GetDescription = AccessibilityGetDescriptionWrapper;
+ ad.GetInterfaces = AccessibilityGetInterfaces; // Not a wrapper, entirely private implementation
ad.GetName = AccessibilityGetNameWrapper;
}
return DuplicateString(description);
}
+ private static uint AccessibilityGetInterfaces(IntPtr self)
+ {
+ // Currently a maximum of one AccessibilityInterface per View is supported.
+ // This will change when we implement AT-SPI interfaces as native C# interfaces.
+ // Then, this method will look like:
+ //
+ // uint flags = 0U;
+ // if (view is IAtspiSelection) flags |= (1U << (int)AccessibilityInterface.Selection)
+ // if (view is IAtspiValue) flags |= (1U << (int)AccessibilityInterface.Value)
+ // ...
+ // return flags;
+
+ View view = GetViewFromRefObject(self);
+
+ if (!view.AtspiInterfaceFlags.HasValue)
+ {
+ NUILog.Error("AtspiInterfaceFlags are not set!");
+ return 0U;
+ }
+
+ return view.AtspiInterfaceFlags.Value;
+ }
+
private static IntPtr AccessibilityGetNameWrapper(IntPtr self)
{
string name = GetViewFromRefObject(self).AccessibilityGetName();