8#include <QtGui/private/qguiapplication_p.h>
10@implementation QUIView (Accessibility)
12- (
void)createAccessibleElement:(QAccessibleInterface *)iface
14 if (!iface || iface->state().invisible || (iface->text(QAccessible::Name).isEmpty() && iface->text(QAccessible::Value).isEmpty() && iface->text(QAccessible::Description).isEmpty()))
16 QAccessible::Id accessibleId = QAccessible::uniqueId(iface);
17 if (UIAccessibilityElement *elem = [QT_MANGLE_NAMESPACE(QMacAccessibilityElement) elementWithId:accessibleId])
18 [m_accessibleElements addObject:elem];
21- (
void)createAccessibleContainer:(QAccessibleInterface *)iface
23 if (!iface || iface->state().invisible)
26 for (
int i = 0; i < iface->childCount(); ++i)
27 [self createAccessibleContainer: iface->child(i)];
30 [self createAccessibleElement:iface];
33- (
void)initAccessibility
37 if (!self.platformWindow)
40 static bool init =
false;
42 QGuiApplicationPrivate::platformIntegration()->accessibility()->setActive(
true);
45 if ([m_accessibleElements count])
48 QWindow *win = self.platformWindow->window();
49 QAccessibleInterface *iface = win->accessibleRoot();
51 [self createAccessibleContainer: iface];
54- (
void)clearAccessibleCache
56 [m_accessibleElements removeAllObjects];
60- (BOOL)isAccessibilityElement
67 [self initAccessibility];
68 return [m_accessibleElements count];
71- (
id)accessibilityElementAtIndex:(NSInteger)index
73 [self initAccessibility];
74 if (NSUInteger(index) >= [m_accessibleElements count])
76 return m_accessibleElements[index];
79- (
NSInteger)indexOfAccessibilityElement:(id)element
81 [self initAccessibility];
82 return [m_accessibleElements indexOfObject:element];
85- (NSArray *)accessibilityElements
87 [self initAccessibility];
88 return m_accessibleElements;