diff options
-rw-r--r-- | src/plugins/accessible/quick/main.cpp | 6 | ||||
-rw-r--r-- | src/plugins/accessible/quick/qaccessiblequickview.cpp | 7 | ||||
-rw-r--r-- | src/quick/items/qquickitem.cpp | 3 | ||||
-rw-r--r-- | tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp | 12 |
4 files changed, 18 insertions, 10 deletions
diff --git a/src/plugins/accessible/quick/main.cpp b/src/plugins/accessible/quick/main.cpp index 2c75e594c2..6592c59e0f 100644 --- a/src/plugins/accessible/quick/main.cpp +++ b/src/plugins/accessible/quick/main.cpp @@ -46,6 +46,7 @@ #include <QtQuick/QQuickView> #include <QtQuick/QQuickItem> +#include <QtQuick/private/qquickitem_p.h> #include <QtQuick/private/qquickaccessibleattached_p.h> #include <qaccessibleplugin.h> @@ -86,8 +87,11 @@ QAccessibleInterface *AccessibleQuickFactory::create(const QString &classname, Q if (classname == QLatin1String("QQuickView")) { return new QAccessibleQuickView(qobject_cast<QQuickView *>(object)); // FIXME } else if (classname == QLatin1String("QQuickItem")) { - QQuickItem * item = qobject_cast<QQuickItem *>(object); + QQuickItem *item = qobject_cast<QQuickItem *>(object); Q_ASSERT(item); + QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item); + if (!itemPrivate->isAccessible) + return 0; QVariant v = QQuickAccessibleAttached::property(item, "role"); bool ok; diff --git a/src/plugins/accessible/quick/qaccessiblequickview.cpp b/src/plugins/accessible/quick/qaccessiblequickview.cpp index 2df1f243b8..ed8167f4d1 100644 --- a/src/plugins/accessible/quick/qaccessiblequickview.cpp +++ b/src/plugins/accessible/quick/qaccessiblequickview.cpp @@ -127,7 +127,11 @@ static QQuickItem *childAt_helper(QQuickItem *item, int x, int y) } QScopedPointer<QAccessibleInterface> accessibleInterface(QAccessible::queryAccessibleInterface(item)); - if (accessibleInterface && accessibleInterface->childCount() == 0) { + // this item has no Accessible attached property + if (!accessibleInterface) + return 0; + + if (accessibleInterface->childCount() == 0) { return (itemScreenRect(item).contains(x, y)) ? item : 0; } @@ -155,6 +159,7 @@ QAccessibleInterface *QAccessibleQuickView::childAt(int x, int y) const if (root) { if (QQuickItem *item = childAt_helper(root, x, y)) return QAccessible::queryAccessibleInterface(item); + return QAccessible::queryAccessibleInterface(root); } return 0; } diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index d2a8ada14a..c5a2b447fc 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -1633,9 +1633,6 @@ void QQuickItemPrivate::setAccessibleFlagAndListener() if (item->d_func()->isAccessible) break; // already set - grandparents should have the flag set as well. - if (item->canvas() && item->canvas()->rootItem() == item) - break; // don't add a listener to the canvas root item - item->d_func()->isAccessible = true; item = item->d_func()->parentItem; } diff --git a/tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp b/tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp index ca04751aae..45a9d11c69 100644 --- a/tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp +++ b/tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp @@ -345,15 +345,17 @@ void tst_QQuickAccessible::hitTest() QAI rootItem = QAI(canvasIface->child(0)); QRect rootRect = rootItem->rect(); - // hit the root item - QAI rootItemIface(canvasIface->childAt(rootRect.x() + 200, rootRect.y() + 50)); - QVERIFY(rootItemIface); - QCOMPARE(rootRect, rootItemIface->rect()); + // check the root item from app + QAI appIface = QAI(QAccessible::queryAccessibleInterface(qApp)); + QVERIFY(appIface); + QAI itemHit(appIface->childAt(rootRect.x() + 200, rootRect.y() + 50)); + QVERIFY(itemHit); + QCOMPARE(rootRect, itemHit->rect()); // hit rect1 QAI rect1(rootItem->child(0)); QRect rect1Rect = rect1->rect(); - rootItemIface = QAI(rootItem->childAt(rect1Rect.x() + 10, rect1Rect.y() + 10)); + QAI rootItemIface = QAI(rootItem->childAt(rect1Rect.x() + 10, rect1Rect.y() + 10)); QVERIFY(rootItemIface); QCOMPARE(rect1Rect, rootItemIface->rect()); QCOMPARE(rootItemIface->text(QAccessible::Name), QLatin1String("rect1")); |