diff options
author | Frederik Gladhorn <[email protected]> | 2011-12-07 07:48:22 +0100 |
---|---|---|
committer | Qt by Nokia <[email protected]> | 2012-01-02 15:33:52 +0100 |
commit | 27a497b3a7581a0cd76407635afca91d1f42aeef (patch) | |
tree | e4b65e5dcfc9a5be6053c24ec06d56fb82fe4c0d /src/qtquick1/graphicsitems/qdeclarativeitem.cpp | |
parent | 017a82c6702768aed68c34f319fa14da591f3df2 (diff) |
Add accessibility to qml
This consists of two parts:
An attached property for QML items and a plugin for the accessibility framework.
The attached property simply takes care of some properties (name, role)
that are needed in order to expose semantics of the application to
assistive tools.
The plugin exposes the hierarchy of QML items to the
accessibility framework.
Change-Id: I32f5603d0d9549b01b3645b205b710b9801762f7
Reviewed-by: Jan-Arve Sæther <[email protected]>
Diffstat (limited to 'src/qtquick1/graphicsitems/qdeclarativeitem.cpp')
-rw-r--r-- | src/qtquick1/graphicsitems/qdeclarativeitem.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/qtquick1/graphicsitems/qdeclarativeitem.cpp b/src/qtquick1/graphicsitems/qdeclarativeitem.cpp index 1f57d53b7e..016dc94408 100644 --- a/src/qtquick1/graphicsitems/qdeclarativeitem.cpp +++ b/src/qtquick1/graphicsitems/qdeclarativeitem.cpp @@ -53,6 +53,8 @@ #include <QtQuick1/private/qdeclarativestategroup_p.h> #include <QtDeclarative/qdeclarativecomponent.h> #include <QtDeclarative/qdeclarativeinfo.h> +// ### Due to the workaround mentioned in accessibleRole() +#include <QtQuick1/private/qdeclarativetext_p.h> #include <QDebug> #include <QPen> @@ -64,6 +66,8 @@ #include <private/qv8engine_p.h> #include <QtWidgets/qgraphicstransform.h> #include <private/qlistmodelinterface_p.h> +#include <QAccessible> +#include <QtQuick1/private/qdeclarativeaccessibleattached_p.h> #include <float.h> @@ -1779,7 +1783,11 @@ QDeclarativeItem::~QDeclarativeItem() */ void QDeclarativeItem::setParentItem(QDeclarativeItem *parent) { + Q_D(QDeclarativeItem); QGraphicsObject::setParentItem(parent); + if (d->isAccessible && parentItem()) { + parentItem()->d_func()->setAccessibleFlagAndListener(); + } } /*! @@ -3022,6 +3030,25 @@ QDeclarativeItemPrivate::AnchorLines::AnchorLines(QGraphicsObject *q) baseline.anchorLine = QDeclarative1AnchorLine::Baseline; } +void QDeclarativeItemPrivate::setAccessibleFlagAndListener() +{ + Q_Q(QDeclarativeItem); + QDeclarativeItem *item = q; + while (item) { + if (item->d_func()->isAccessible) + break; // already set - grandparents should have the flag set as well. + +// if (qmlEngine(item) != 0) { +// item->d_func()->addItemChangeListener(QDeclarativeEnginePrivate::getAccessibilityUpdateManager(qmlEngine(item)), +// QDeclarativeItemPrivate::Geometry | QDeclarativeItemPrivate::Visibility | +// QDeclarativeItemPrivate::Opacity | QDeclarativeItemPrivate::Destroyed); +// } + + item->d_func()->isAccessible = true; + item = item->parentItem(); + } +} + QPointF QDeclarativeItemPrivate::computeTransformOrigin() const { Q_Q(const QDeclarativeItem); |