7#include <QtGui/qguiapplication.h>
8#include <QtGui/private/qwindow_p.h>
10#include <QtQuick/qquickitem.h>
11#include <QtQuick/private/qquickitem_p.h>
15#if QT_CONFIG(accessibility)
19QAccessibleQuickWindow::QAccessibleQuickWindow(QQuickWindow *object)
20 :QAccessibleObject(object)
24QList<QQuickItem *> QAccessibleQuickWindow::rootItems()
const
26 if (QQuickItem *ci = window() ? window()->contentItem() :
nullptr)
27 return accessibleUnignoredChildren(ci);
28 return QList<QQuickItem *>();
31int QAccessibleQuickWindow::childCount()
const
33 return rootItems().size();
36QAccessibleInterface *QAccessibleQuickWindow::parent()
const
38 if (QWindow *w = window()) {
40 if (QObject *a11yParent = QWindowPrivate::get(w)->accessibleParent)
41 return QAccessible::queryAccessibleInterface(a11yParent);
44 return QAccessible::queryAccessibleInterface(qApp);
47QAccessibleInterface *QAccessibleQuickWindow::child(
int index)
const
49 const QList<QQuickItem*> &kids = rootItems();
50 if (index >= 0 && index < kids.size())
51 return QAccessible::queryAccessibleInterface(kids.at(index));
55QAccessibleInterface *QAccessibleQuickWindow::focusChild()
const
57 QObject *focusObject = window() ? window()->focusObject() :
nullptr;
59 QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(focusObject);
60 if (!iface || iface ==
this || !iface->focusChild())
62 return iface->focusChild();
67QAccessible::Role QAccessibleQuickWindow::role()
const
69 if (window() && window()->isTopLevel())
70 return QAccessible::Window;
72 return QAccessible::Client;
75QAccessible::State QAccessibleQuickWindow::state()
const
77 QAccessible::State st;
84 st.invisible = !window()->isVisible();
85 st.focused = window() == QGuiApplication::focusWindow();
86 st.active = window()->isActive();
91QRect QAccessibleQuickWindow::rect()
const
95 return QRect(window()->mapToGlobal(QPoint(0, 0)), window()->size());
98QString QAccessibleQuickWindow::text(QAccessible::Text text)
const
102#ifdef Q_ACCESSIBLE_QUICK_ITEM_ENABLE_DEBUG_DESCRIPTION
103 if (text == QAccessible::DebugDescription) {
104 return QString::fromLatin1(object()->metaObject()->className()) ;
107 if (text == QAccessible::Name && window()->isTopLevel())
108 return window()->title();
113QAccessibleInterface *QAccessibleQuickWindow::childAt(
int x,
int y)
const
117 if (!window()->contentItem())
120 const QList<QQuickItem *> kids = accessibleUnignoredChildren(window()->contentItem(),
true);
121 for (
int i = kids.size() - 1; i >= 0; --i) {
122 QAccessibleInterface *childIface = QAccessible::queryAccessibleInterface(kids.at(i));
123 if (childIface && !childIface->state().invisible) {
124 if (QAccessibleInterface *iface = childIface->childAt(x, y))
126 if (childIface->rect().contains(x, y))
133int QAccessibleQuickWindow::indexOfChild(
const QAccessibleInterface *iface)
const
137 const QList<QQuickItem *> &roots = rootItems();
138 i = roots.size() - 1;
140 if (iface->object() == roots.at(i))