Don't assume there is only one toplevel item.
authorJan Arve Saether <jan-arve.saether@digia.com>
Thu, 25 Sep 2014 09:40:21 +0000 (11:40 +0200)
committerJan Arve Sæther <jan-arve.saether@theqtcompany.com>
Tue, 21 Oct 2014 06:05:24 +0000 (08:05 +0200)
With the upcoming introduction of unignoredChildren, there can
exist many top level items (if the root item is ignored).

Change-Id: If7aaea08fdd4d1f5a0a5109e1239c53e0af9b61e
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
src/quick/accessible/qaccessiblequickview.cpp
src/quick/accessible/qaccessiblequickview_p.h

index db0b042..e3ee1d2 100644 (file)
@@ -50,19 +50,16 @@ QAccessibleQuickWindow::QAccessibleQuickWindow(QQuickWindow *object)
 {
 }
 
-QQuickItem *QAccessibleQuickWindow::rootItem() const
+QList<QQuickItem *> QAccessibleQuickWindow::rootItems() const
 {
-    if (QQuickItem *ci = window()->contentItem()) {
-        const QList<QQuickItem *> &childItems = accessibleUnignoredChildren(ci);
-        if (!childItems.isEmpty())
-            return childItems.first();
-    }
-    return 0;
+    if (QQuickItem *ci = window()->contentItem())
+        return accessibleUnignoredChildren(ci);
+    return QList<QQuickItem *>();
 }
 
 int QAccessibleQuickWindow::childCount() const
 {
-    return rootItem() ? 1 : 0;
+    return rootItems().count();
 }
 
 QAccessibleInterface *QAccessibleQuickWindow::parent() const
@@ -73,8 +70,9 @@ QAccessibleInterface *QAccessibleQuickWindow::parent() const
 
 QAccessibleInterface *QAccessibleQuickWindow::child(int index) const
 {
-    if (index == 0)
-        return QAccessible::queryAccessibleInterface(rootItem());
+    const QList<QQuickItem*> &kids = rootItems();
+    if (index >= 0 && index < kids.count())
+        return QAccessible::queryAccessibleInterface(kids.at(index));
     return 0;
 }
 
@@ -127,12 +125,17 @@ QAccessibleInterface *QAccessibleQuickWindow::childAt(int x, int y) const
 
 int QAccessibleQuickWindow::indexOfChild(const QAccessibleInterface *iface) const
 {
+    int i = -1;
     if (iface) {
-        QQuickItem *declarativeRoot = rootItem();
-        if (declarativeRoot == iface->object())
-            return 0;
+        const QList<QQuickItem *> &roots = rootItems();
+        i = roots.count() - 1;
+        while (i >= 0) {
+            if (iface->object() == roots.at(i))
+                break;
+            --i;
+        }
     }
-    return -1;
+    return i;
 }
 
 QT_END_NAMESPACE
index 44a3bc0..f6da6ba 100644 (file)
@@ -60,7 +60,7 @@ public:
 
 private:
     QQuickWindow *window() const { return static_cast<QQuickWindow*>(object()); }
-    QQuickItem *rootItem() const;
+    QList<QQuickItem *> rootItems() const;
 };
 
 #endif // QT_NO_ACCESSIBILITY