aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/accessible/qaccessiblequickitem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/accessible/qaccessiblequickitem.cpp')
-rw-r--r--src/quick/accessible/qaccessiblequickitem.cpp21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/quick/accessible/qaccessiblequickitem.cpp b/src/quick/accessible/qaccessiblequickitem.cpp
index fe01326bbc..3f023ae621 100644
--- a/src/quick/accessible/qaccessiblequickitem.cpp
+++ b/src/quick/accessible/qaccessiblequickitem.cpp
@@ -108,7 +108,7 @@ QAccessibleInterface *QAccessibleQuickItem::parent() const
QQuickItem *parent = item()->parentItem();
QQuickWindow *window = item()->window();
QQuickItem *ci = window ? window->contentItem() : 0;
- while (parent && parent != ci)
+ while (parent && !QQuickItemPrivate::get(parent)->isAccessible && parent != ci)
parent = parent->parentItem();
if (parent) {
@@ -120,6 +120,8 @@ QAccessibleInterface *QAccessibleQuickItem::parent() const
// it here and return an interface for the scene instead.
return QAccessible::queryAccessibleInterface(window);
} else {
+ while (parent && !parent->d_func()->isAccessible)
+ parent = parent->parentItem();
return QAccessible::queryAccessibleInterface(parent);
}
}
@@ -146,16 +148,23 @@ int QAccessibleQuickItem::indexOfChild(const QAccessibleInterface *iface) const
return kids.indexOf(static_cast<QQuickItem*>(iface->object()));
}
-QList<QQuickItem *> accessibleUnignoredChildren(QQuickItem *item, bool paintOrder)
+static void unignoredChildren(QQuickItem *item, QList<QQuickItem *> *items, bool paintOrder)
{
- QList<QQuickItem *> items;
QList<QQuickItem*> childItems = paintOrder ? QQuickItemPrivate::get(item)->paintOrderChildItems()
: item->childItems();
Q_FOREACH (QQuickItem *child, childItems) {
- QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(child);
- if (itemPrivate->isAccessible)
- items.append(child);
+ if (QQuickItemPrivate::get(child)->isAccessible) {
+ items->append(child);
+ } else {
+ unignoredChildren(child, items, paintOrder);
+ }
}
+}
+
+QList<QQuickItem *> accessibleUnignoredChildren(QQuickItem *item, bool paintOrder)
+{
+ QList<QQuickItem *> items;
+ unignoredChildren(item, &items, paintOrder);
return items;
}