diff options
Diffstat (limited to 'src/quick/items/qquickitem.cpp')
-rw-r--r-- | src/quick/items/qquickitem.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index c95ae1a9c3..e9dc737e8a 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -66,6 +66,7 @@ #include <private/qlistmodelinterface_p.h> #include <private/qquickitem_p.h> #include <private/qdeclarativeaccessors_p.h> +#include <QtQuick/private/qquickaccessibleattached_p.h> #include <float.h> @@ -1603,6 +1604,22 @@ void QQuickItemPrivate::setLayoutMirror(bool mirror) } } +void QQuickItemPrivate::setAccessibleFlagAndListener() +{ + Q_Q(QQuickItem); + QQuickItem *item = q; + while (item) { + 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; + } +} + /*! \class QQuickItem \brief The QQuickItem class provides the most basic of all visual items in QML. @@ -1804,6 +1821,7 @@ QQuickItem::~QQuickItem() if (change.types & QQuickItemPrivate::Destroyed) change.listener->itemDestroyed(this); } + d->changeListeners.clear(); delete d->_anchorLines; d->_anchorLines = 0; delete d->_anchors; d->_anchors = 0; @@ -1913,6 +1931,10 @@ void QQuickItem::setParentItem(QQuickItem *parentItem) d->itemChange(ItemParentHasChanged, d->parentItem); d->parentNotifier.notify(); + if (d->isAccessible && d->parentItem) { + d->parentItem->d_func()->setAccessibleFlagAndListener(); + } + emit parentChanged(d->parentItem); } @@ -2251,6 +2273,7 @@ QQuickItemPrivate::QQuickItemPrivate() inheritedLayoutMirror(false), effectiveLayoutMirror(false), isMirrorImplicit(true), inheritMirrorFromParent(false), inheritMirrorFromItem(false), childrenDoNotOverlap(false), staticSubtreeGeometry(false), + isAccessible(false), canvas(0), parentItem(0), sortedChildItems(&childItems), @@ -2886,6 +2909,11 @@ void QQuickItem::updatePolish() { } +void QQuickItem::sendAccessibilityUpdate() +{ + Q_D(QQuickItem); +} + void QQuickItemPrivate::removeItemChangeListener(QQuickItemChangeListener *listener, ChangeTypes types) { ChangeListener change(listener, types); @@ -2931,6 +2959,7 @@ void QQuickItem::inputMethodEvent(QInputMethodEvent *event) void QQuickItem::focusInEvent(QFocusEvent *) { + QAccessible::updateAccessibility(this, 0, QAccessible::Focus); } void QQuickItem::focusOutEvent(QFocusEvent *) @@ -3895,6 +3924,9 @@ void QQuickItemPrivate::setEffectiveVisibleRecur(bool newEffectiveVisible) change.listener->itemVisibilityChanged(q); } + if (isAccessible) + QAccessible::updateAccessibility(q, 0, effectiveVisible ? QAccessible::ObjectShow : QAccessible::ObjectHide ); + emit q->visibleChanged(); } |