9#include <QtGui/private/qguiapplication_p.h>
10#include <QtGui/private/qaccessiblebridgeutils_p.h>
12@implementation QUIView (Accessibility)
14- (
void)createAccessibleElement:(QAccessibleInterface *)iface
16 if (!iface || iface->state().invisible || (iface->text(QAccessible::Name).isEmpty() && iface->text(QAccessible::Value).isEmpty() && iface->text(QAccessible::Description).isEmpty()))
18 QAccessible::Id accessibleId = QAccessible::uniqueId(iface);
19 if (UIAccessibilityElement *elem = [QT_MANGLE_NAMESPACE(QMacAccessibilityElement) elementWithId:accessibleId])
20 [m_accessibleElements addObject:elem];
23- (
void)createAccessibleContainer:(QAccessibleInterface *)iface
25 if (!iface || iface->state().invisible)
28 QWindow *window = self.qwindow;
30 for (
int i = 0; i < iface->childCount(); ++i) {
31 QAccessibleInterface *child = iface->child(i);
32 if (!child || child->state().invisible)
35 QWindow *childWindow = QAccessibleBridgeUtils::windowFor(child, iface, window);
36 if (childWindow != window && childWindow->handle()) {
37 [m_accessibleElements addObject:
reinterpret_cast<UIView *>(childWindow->handle()->winId())];
41 [self createAccessibleContainer:child];
45 [self createAccessibleElement:iface];
48- (
void)initAccessibility
52 if (!self.platformWindow)
55 static bool init =
false;
57 QGuiApplicationPrivate::platformIntegration()->accessibility()->setActive(
true);
60 if ([m_accessibleElements count])
63 QWindow *win = self.platformWindow->window();
64 QAccessibleInterface *iface = win->accessibleRoot();
66 [self createAccessibleContainer: iface];
69- (
void)clearAccessibleCache
71 [m_accessibleElements removeAllObjects];
75- (BOOL)isAccessibilityElement
82 [self initAccessibility];
83 return [m_accessibleElements count];
86- (
id)accessibilityElementAtIndex:(NSInteger)index
88 [self initAccessibility];
89 if (NSUInteger(index) >= [m_accessibleElements count])
91 return m_accessibleElements[index];
94- (
NSInteger)indexOfAccessibilityElement:(id)element
96 [self initAccessibility];
97 return [m_accessibleElements indexOfObject:element];
100- (NSArray *)accessibilityElements
102 [self initAccessibility];
103 return m_accessibleElements;